Skip to content

图表

OfficeBasicTools

一个预先定义好的工具集

GetAllChart

这是一个函数,返回一个字典,key是Sheet的名字,value是Sheet中的第一个图表

需要提供一个打开的Workbooks,请注意,这个Workbooks必须已经被COM打开且中途不可被关闭

用法示例

c#
Dictionary<string, Excel.ChartObject> charts = OfficeBasicTools.GetAllChart(workbooks);

PasteChart

这是一个函数,将一个图表粘贴到指定的Sheet中

需要提供一个打开的Sheet、启用的图表,请注意,这个Sheet必须已经被COM打开且中途不可被关闭,这个图表必须中途不可被释放

第三个参数为可选项,当复制或粘贴的系统操作失败的时候会重试。当不提供该参数时,默认重试5次。

用法示例

c#
OfficeBasicTools.PasteChart(chart, Sheet);

ExcelChart_To_SVG

这是一个函数,将一个Excel下的所有Sheet中的第一个图表转换为SVG

需要提供一个excelApplication,输入目录

输出目录作为可选项,当没提供输出目录的时候,将输入目录作为输出目录

结果会放在输出目录的/img/excelFileName 下

c#
OfficeBasicTools.ExcelChart_To_SVG(excelApp, inputFolderPath);

HexToBGR

颜色的HEX值转BGR

c#
int bgr = OfficeBasicTools.HexToBGR("#FF0000");

CloseAllOfficeProcess

关闭所有Excel进程

c#
OfficeBasicTools.CloseAllOfficeProcess();

获取一个Excel中的所有Sheet中的第一个图表

c#
 var excelTemplate = excelApp.Workbooks.Open(excelChartTemplatePath);

 Dictionary<string, Excel.ChartObject> templates = OfficeBasicTools.GetAllChart(excelTemplate);

如何给一个柱形图的一个series下的每个柱子修改颜色

c#
for (int i = 1; i <= chartSeries.Count; i++)
{
    var chartSeriesItem = chartSeries.Item(i);
    for (int pointIndex = 1; pointIndex <= chartSeriesItem.Points().Count; pointIndex++)
    {
        chartSeriesItem.Points(pointIndex).Format.Fill.ForeColor.RGB = OfficeBasicTools.HexToBGR(color[pointIndex - 1]);
    }
}

如何给一个图表的数据设置数据源

c#
Chart.SetSourceData(sheet.Range[$"A1:B2"])

如何删除所有series

c#
for (int i = chartSeries.Count; i >= 1; i--)
{
    Excel.Series seriesItem = chartSeries[i];
    seriesItem.Delete();
    System.Runtime.InteropServices.Marshal.ReleaseComObject(seriesItem);
}

如何设置Y轴标题

c#
  var yAxis = chart.Chart.Axes(Excel.XlAxisType.xlValue);
  yAxis.HasTitle = true;
  yAxis.AxisTitle.Text = "title";

如何手动添加series

c#
 Excel.Series series1 = Chart.Chart.SeriesCollection().NewSeries();
 series1.Name = Sheet.Cells[1, 1].Value2.ToString();
 series1.XValues = Sheet.Range[$"B2:B{k - 1}"];
 series1.Values = Sheet.Range[$"C2:C{k - 1}"];

 for (int i = 0; i < count; i++)
 {
     int pos = k + i;
     Excel.Series series2 = newChart.Chart.SeriesCollection().NewSeries();
     series2.Name = newSheet.Cells[pos, 1].Value2.ToString();
     series2.XValues = newSheet.Range[$"B{pos}:B{pos}"];
     series2.Values = newSheet.Range[$"C{pos}:C{pos}"];
 }