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);
}
}最佳实践
- 明确需求:尽量详细描述报表需求
- 使用模板:对常用报表使用模板复用
- 数据验证:生成后检查数据准确性
- 格式优化:调整列宽、样式等使报表更美观
- 定期更新:根据业务变化更新模板