Logo

使用C#和AI在Excel中生成多种类型的图表

photo

2025年06月09日

在数据分析和报告中,图表是一种非常直观的方式来展示数据。通过使用C#和AI,我们可以自动化生成Excel图表,不仅节省时间,还能根据数据特点选择最适合的图表类型。本文将详细介绍如何实现这一过程,包括AI提示词的编写、JSON数据的生成以及C#代码的实现。

1.AI提示词的编写

为了生成包含数据和图表建议的JSON,我们需要编写一个AI提示词。这个提示词将指导AI生成包含数据表格和多种图表建议的JSON。以下是一个示例:

请根据以下描述生成一个JSON对象,其中包含数据表格和多种图表建议:
描述:2024年1月,我们公司的销售额和利润情况如下:
- 2024年1月1日,销售额为1000元,利润为200元。
- 2024年1月2日,销售额为1500元,利润为300元。
- 2024年1月3日,销售额为1200元,利润为250元。

请生成一个JSON对象,其中包含以下内容:
1. 一个数据表格,包含以下列:
   - 日期(格式为YYYY-MM-DD)
   - 销售额(整数)
   - 利润(整数)
2. 一个图表建议列表,每个建议包含以下字段:
   - 图表类型(例如:柱状图、折线图、饼图、面积图、条形图、散点图等)
   - 图表标题(描述性文本)

图表建议列表:
- 图表类型:柱状图
  - 图表标题:2024年1月销售和利润柱状图分析
- 图表类型:折线图
  - 图表标题:2024年1月销售和利润折线图分析
- 图表类型:饼图
  - 图表标题:2024年1月利润占比饼图分析
- 图表类型:面积图
  - 图表标题:2024年1月销售和利润面积图分析
- 图表类型:条形图
  - 图表标题:2024年1月销售和利润条形图分析
- 图表类型:散点图
  - 图表标题:2024年1月销售额与利润散点图分析

2.AI生成的JSON示例

AI根据上述提示词生成的JSON可能如下所示:

{
  "data": [
    ["2024-01-01", 1000, 200],
    ["2024-01-02", 1500, 300],
    ["2024-01-03", 1200, 250]
  ],
  "chartSuggestions": [
    {
      "chartType": "ColumnClustered",
      "chartTitle": "2024年1月销售和利润柱状图分析"
    },
    {
      "chartType": "Line",
      "chartTitle": "2024年1月销售和利润折线图分析"
    },
    {
      "chartType": "Pie",
      "chartTitle": "2024年1月利润占比饼图分析"
    },
    {
      "chartType": "Area",
      "chartTitle": "2024年1月销售和利润面积图分析"
    },
    {
      "chartType": "BarClustered",
      "chartTitle": "2024年1月销售和利润条形图分析"
    },
    {
      "chartType": "XYScatter",
      "chartTitle": "2024年1月销售额与利润散点图分析"
    }
  ]
}

3.C#代码实现

以下是完整的C#代码示例,展示如何根据AI生成的JSON在Excel中生成多种类型的图表:

using System;
using System.Runtime.InteropServices;
using System.Net.Http;
using System.Threading.Tasks;
using Newtonsoft.Json.Linq;
using Excel = Microsoft.Office.Interop.Excel;

namespace ExcelAddInExample
{
    public class ChartGenerator
    {
        // 假设有一个AI服务接口,用于生成数据和图表建议
        private IAIChartService _aiChartService;

        public ChartGenerator(IAIChartService aiChartService)
        {
            _aiChartService = aiChartService;
        }

        public async Task GenerateChartAsync(string sheetName, string chartLocation)
        {
            // 调用AI服务获取包含数据和图表建议的JSON
            string jsonResponse = await _aiChartService.GetDataAndChartSuggestionsAsync();

            // 解析JSON数据
            JObject jsonResponseObject = JObject.Parse(jsonResponse);
            JArray data = (JArray)jsonResponseObject["data"];
            JArray chartSuggestions = (JArray)jsonResponseObject["chartSuggestions"];

            // 启动Excel应用程序
            Excel.Application excelApp = new Excel.Application();
            Excel.Workbook workbook = excelApp.Workbooks.Add();
            Excel.Worksheet worksheet = workbook.Sheets[sheetName];

            // 将数据写入Excel
            int row = 1;
            foreach (var item in data)
            {
                int col = 1;
                foreach (var value in item)
                {
                    worksheet.Cells[row, col] = value.ToString();
                    col++;
                }
                row++;
            }

            // 定义数据范围
            string dataRangeAddress = $"A1:{ExcelHelper.GetExcelColumnName(data[0].Count)}{data.Count}";

            // 创建图表
            Excel.ChartObjects chartObjects = (Excel.ChartObjects)worksheet.ChartObjects();
            foreach (var suggestion in chartSuggestions)
            {
                Excel.ChartObject chartObject = chartObjects.Add(100, 50, 300, 200); // 指定图表位置和大小
                Excel.Chart chart = chartObject.Chart;

                // 设置图表数据源
                Excel.Range dataRange = worksheet.get_Range(dataRangeAddress);
                chart.SetSourceData(dataRange, Excel.XlRowCol.xlColumns);

                // 设置图表类型
                string chartType = (string)suggestion["chartType"];
                switch (chartType)
                {
                    case "ColumnClustered":
                        chart.ChartType = Excel.XlChartType.xlColumnClustered;
                        break;
                    case "Line":
                        chart.ChartType = Excel.XlChartType.xlLine;
                        break;
                    case "Pie":
                        chart.ChartType = Excel.XlChartType.xlPie;
                        break;
                    case "Area":
                        chart.ChartType = Excel.XlChartType.xlArea;
                        break;
                    case "BarClustered":
                        chart.ChartType = Excel.XlChartType.xlBarClustered;
                        break;
                    case "XYScatter":
                        chart.ChartType = Excel.XlChartType.xlXYScatter;
                        break;
                    default:
                        chart.ChartType = Excel.XlChartType.xlColumnClustered; // 默认为柱状图
                        break;
                }

                // 设置图表标题
                string chartTitle = (string)suggestion["chartTitle"];
                chart.HasTitle = true;
                chart.ChartTitle.Text = chartTitle;

                // 将图表放置在指定位置
                chart.Location(Excel.XlChartLocation.xlLocationAsObject, chartLocation);
            }

            // 保存工作簿
            workbook.SaveAs("GeneratedChart.xlsx");

            // 关闭Excel应用程序
            workbook.Close(false);
            excelApp.Quit();

            // 释放COM对象
            Marshal.ReleaseComObject(chartObjects);
            Marshal.ReleaseComObject(worksheet);
            Marshal.ReleaseComObject(workbook);
            Marshal.ReleaseComObject(excelApp);
        }
    }

    // AI图表服务接口
    public interface IAIChartService
    {
        Task<string> GetDataAndChartSuggestionsAsync();
    }

    // AI图表服务实现
    public class AIChartService : IAIChartService
    {
        private readonly HttpClient _httpClient;

        public AIChartService()
        {
            _httpClient = new HttpClient();
        }

        public async Task<string> GetDataAndChartSuggestionsAsync()
        {
            // 调用AI服务获取包含数据和图表建议的JSON
            // 这里只是一个示例,实际实现需要调用具体的AI API
            HttpResponseMessage response = await _httpClient.GetAsync("https://your-ai-service-endpoint.com/api/chart-suggestions");
            response.EnsureSuccessStatusCode();
            return await response.Content.ReadAsStringAsync();
        }
    }

    // Excel工具类
    public static class ExcelHelper
    {
        public static string GetExcelColumnName(int columnNumber)
        {
            string columnName = "";
            while (columnNumber > 0)
            {
                int remainder = (columnNumber - 1) % 26;
                columnName = (char)('A' + remainder) + columnName;
                columnNumber = (columnNumber - remainder) / 26;
            }
            return columnName;
        }
    }
}

橙子主题打折出售

其实我不卖,主要是这里是放广告的,所以就放了一个
毕竟主题都没做完,卖了也是坑.

购买它
所有附件
该文章没有附件.
本文为原创文章,请注意保留出处!

留言板

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

热门文章

无法握住的故土 在我们心灵最温暖的角落,总有一寸土地是属于故乡的。虽然我们看似已远离故土,可骨子里对故乡的依恋却是从未冷却过。我们无论漂泊他乡,还是在繁华都市平步青云,可故乡的悠悠情思总会潜入梦乡与你缠绵。是儿时那一缕缕茉莉的清香萦绕在梦境,也是邻家那已锈迹斑斑的铁壶里,开出艳丽的花儿在梦的边缘摇曳。故土就这样根深蒂固地在我们的灵魂深处烙下深深的印记。 作者:Pastore Antonio
1596 浏览量
EWS(Exchange Service)基本使用(获取个人会议,会议室会议内容,会议室列表,发送会议,修改会议,删除会议) 最近公司要求和exchange服务对接,所以稍微研究了一下官方文档,做出以下总结,欢迎大家补充。先...EWS(ExchangeService)基本使用(获取个人会议,会议室会议内容,会议室列表,发送会议,修改会议,删除会议) 作者:Pastore Antonio
1585 浏览量
Sql Server 部署SSIS包完成远程数据传输 本篇介绍如何使用SSIS和作业完成自动更新目标数据任务。**温馨提示:如需转载本文,请注明...SqlServer部署SSIS包完成远程数据传输 作者:Pastore Antonio
1576 浏览量
SQL Server AG集群启动不起来的临时自救大招 背景前晚一朋友遇到AG集群发生来回切换不稳定的情况,情急之下,朋友在命令行使用命令重启WSFC集群...SQLServerAG集群启动不起来的临时自救大招 作者:Pastore Antonio
1570 浏览量
windows 下安装 memcahce 官网上并未提供Memcached的Windows平台安装包,我们可以使用以下链接来下载,你需...windows下安装memcahce 作者:Pastore Antonio
1565 浏览量