Skip to content

AI Excel生成

夜月AI应用平台 的AI Excel模块通过自然语言驱动的智能报表生成,让用户可以通过对话式界面快速创建专业的Excel报表。

核心特性

  • LLM驱动生成:通过大语言模型理解需求并生成报表
  • 对话式界面:自然语言交互,无需学习复杂公式
  • 模板管理:支持保存和复用报表模板
  • 多格式导出:支持Excel、CSV、PDF等格式

工作流程

mermaid
graph LR
    A[用户输入] --> B[意图理解]
    B --> C[数据提取]
    C --> D[模板生成]
    D --> E[Excel生成]
    E --> F[文件下载]

使用场景

财务报表

用户:帮我生成一份本月的财务报表,包含收入、支出、利润
AI:好的,我将为您生成包含以下内容的财务报表:
- 收入明细
- 支出明细
- 利润汇总

数据分析

用户:分析这份销售数据,生成月度趋势图
AI:我将为您分析销售数据并生成:
- 月度销售趋势图
- 产品销售占比
- 同比增长率

业务统计

用户:统计本月的订单数据,按地区分类
AI:我将为您生成按地区分类的订单统计:
- 各地区订单数量
- 各地区订单金额
- 地区占比分析

模板管理

模板定义

java
@Entity
public class ExcelTemplate {
    @Id
    private Long id;
    private String name;           // 模板名称
    private String description;    // 模板描述
    private String category;       // 分类
    private String prompt;         // 生成提示词
    private String structure;      // 表格结构
    private Map<String, Object> config;  // 配置
}

内置模板

模板名称用途说明
财务报表财务分析收入、支出、利润统计
销售报表销售分析销售趋势、产品分析
库存报表库存管理库存统计、预警提醒
人员报表人力资源人员统计、考勤分析
项目报表项目管理进度跟踪、成本分析

代码示例

Excel生成服务

java
@Service
public class AiExcelService {
    
    public ExcelFile generate(String userRequest) {
        // 1. 理解用户意图
        ExcelIntent intent = llmService.parseIntent(userRequest);
        
        // 2. 提取数据需求
        DataRequirement requirement = llmService.extractRequirement(intent);
        
        // 3. 查询数据
        Map<String, Object> data = dataService.query(requirement);
        
        // 4. 生成Excel结构
        ExcelStructure structure = llmService.generateStructure(intent, data);
        
        // 5. 生成Excel文件
        return excelGenerator.generate(structure, data);
    }
}

对话式生成

java
@Service
public class ExcelChatService {
    
    public ExcelChatResponse chat(String sessionId, String message) {
        // 获取对话历史
        List<ChatMessage> history = chatHistoryService.getHistory(sessionId);
        
        // 生成回复
        String response = llmService.chat(history, message);
        
        // 检查是否需要生成Excel
        if (isExcelRequest(response)) {
            ExcelFile file = aiExcelService.generate(response);
            return ExcelChatResponse.builder()
                .message("Excel已生成")
                .file(file)
                .build();
        }
        
        return ExcelChatResponse.builder()
            .message(response)
            .build();
    }
}

模板服务

java
@Service
public class ExcelTemplateService {
    
    public ExcelTemplate create(String name, String prompt, String structure) {
        ExcelTemplate template = new ExcelTemplate();
        template.setName(name);
        template.setPrompt(prompt);
        template.setStructure(structure);
        return templateRepository.save(template);
    }
    
    public ExcelFile generateFromTemplate(Long templateId, Map<String, Object> data) {
        ExcelTemplate template = templateRepository.findById(templateId);
        return excelGenerator.generate(template.getStructure(), data);
    }
}

Excel生成器

生成接口

java
public interface ExcelGenerator {
    
    // 生成Excel文件
    ExcelFile generate(ExcelStructure structure, Map<String, Object> data);
    
    // 生成Excel文件(带模板)
    ExcelFile generate(String templatePath, Map<String, Object> data);
    
    // 导出为CSV
    byte[] exportCsv(ExcelFile excelFile);
    
    // 导出为PDF
    byte[] exportPdf(ExcelFile excelFile);
}

Apache POI实现

java
@Service
public class PoiExcelGenerator implements ExcelGenerator {
    
    @Override
    public ExcelFile generate(ExcelStructure structure, Map<String, Object> data) {
        Workbook workbook = new XSSFWorkbook();
        
        // 创建表头
        Sheet sheet = workbook.createSheet(structure.getSheetName());
        Row headerRow = sheet.createRow(0);
        List<String> headers = structure.getHeaders();
        for (int i = 0; i < headers.size(); i++) {
            headerRow.createCell(i).setCellValue(headers.get(i));
        }
        
        // 填充数据
        List<Map<String, Object>> rows = (List<Map<String, Object>>) data.get("rows");
        for (int i = 0; i < rows.size(); i++) {
            Row dataRow = sheet.createRow(i + 1);
            Map<String, Object> row = rows.get(i);
            for (int j = 0; j < headers.size(); j++) {
                dataRow.createCell(j).setCellValue(
                    String.valueOf(row.get(headers.get(j)))
                );
            }
        }
        
        // 转换为文件
        return convertToFile(workbook);
    }
}

最佳实践

  1. 明确需求:尽量详细描述报表需求
  2. 使用模板:对常用报表使用模板复用
  3. 数据验证:生成后检查数据准确性
  4. 格式优化:调整列宽、样式等使报表更美观
  5. 定期更新:根据业务变化更新模板

相关链接

Copyright © 2023-2026 nitemoon.cn All Rights Reserved