Logo

Logo

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

Pastore Antonio
Pastore Antonio 2025年06月09日
1046 阅读 0 评论 约 6852 字 阅读约 14 分钟

在数据分析和报告中,图表是一种非常直观的方式来展示数据。通过使用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;
        }
    }
}
查看完整代码

橙子主题打折出售

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

购买它
部分文章可能存在转载,如果涉及到侵权,请联系删除文章。

留言板

发表回复

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

8 - 2 = ?

探索AIGC相关的精彩内容,共 15 篇文章

Azure AI 服务之语音识别

简介 Azure AI 服务中的语音识别 API 是微软提供的一项先进技术,旨在帮助开发者轻松实现语 ... 使用C#和AI在Excel中生成多种类型的图表

2026-02-17 · Xzavier Aaron
MCP | 一文详解什么是 MCP以及 MCP 可以做什么

一、什么是 MCP MCP(Model Context Protocol)是一个专为大型语言模型(L ... 使用C#和AI在Excel中生成多种类型的图表

2026-02-14 · Shen, Luke
你的工作流程,值得一个“全自动数字分身”:录制、截图、成文,一气呵成

一、一句话认识 TestFlow Recorder 在数字化工作环境中,如何准确记录操作步骤并生成清 ... 使用C#和AI在Excel中生成多种类型的图表

2026-02-14 · Xzavier Aaron
Flowise 前端框架配置指南

用户需求 问题:有没有适合配置 Flowise 的前端框架? 目标:寻找类似 Open WebUI ... 使用C#和AI在Excel中生成多种类型的图表

2026-02-14 · Xzavier Aaron