有没有办法使用 C#/EPPlus 为 Excel 图设置网格线选项
Is there a way to set gridline options for Excel graphs using C# / EPPlus
我正在尝试使用 EPPlus 和 C# 创建一个 excel 图表。我可以成功创建以下图表:
但是,我希望程序在运行时在两个方向上都创建主要和次要网格线;这样图形看起来像这样:
我知道我可以在 Excel 中调整这些设置,但我希望能够使用我的代码设置默认网格线。我在 EPPlus 中找不到可以处理此问题的设置(如果有,请告诉我)。我想弄清楚如何直接自定义 XML 但我也遇到了麻烦。
有什么方法可以做到这一点吗?感谢任何帮助。
有点奇怪没有添加,因为它很容易打开。这是使用 XML 的方法(如果你想设置颜色和大小,你必须更多地了解 XML 操作,但这将帮助你开始):
using (var pck = new ExcelPackage(fileInfo))
{
var workbook = pck.Workbook;
var worksheet = workbook.Worksheets.Add("Sheet1");
worksheet.Cells.LoadFromDataTable(datatable, true);
var chart = worksheet.Drawings.AddChart("chart test", eChartType.XYScatter);
var series = chart.Series.Add(worksheet.Cells["B2:B11"], worksheet.Cells["A2:A11"]);
//Get reference to the worksheet xml for proper namespace
var chartXml = chart.ChartXml;
var nsuri = chartXml.DocumentElement.NamespaceURI;
var nsm = new XmlNamespaceManager(chartXml.NameTable);
nsm.AddNamespace("c", nsuri);
//XY Scatter plots have 2 value axis and no category
var valAxisNodes = chartXml.SelectNodes("c:chartSpace/c:chart/c:plotArea/c:valAx", nsm);
if (valAxisNodes != null && valAxisNodes.Count > 0)
foreach (XmlNode valAxisNode in valAxisNodes)
{
if (valAxisNode.SelectSingleNode("c:majorGridlines", nsm) == null)
valAxisNode.AppendChild(chartXml.CreateNode(XmlNodeType.Element, "c:majorGridlines", nsuri));
if (valAxisNode.SelectSingleNode("c:minorGridlines", nsm) == null)
valAxisNode.AppendChild(chartXml.CreateNode(XmlNodeType.Element, "c:minorGridlines", nsuri));
}
//Other charts can have a category axis
var catAxisNodes = chartXml.SelectNodes("c:chartSpace/c:chart/c:plotArea/c:catAx", nsm);
if (catAxisNodes != null && catAxisNodes.Count > 0)
foreach (XmlNode catAxisNode in catAxisNodes)
{
if (catAxisNode.SelectSingleNode("c:majorGridlines", nsm) == null)
catAxisNode.AppendChild(chartXml.CreateNode(XmlNodeType.Element, "c:majorGridlines", nsuri));
if (catAxisNode.SelectSingleNode("c:minorGridlines", nsm) == null)
catAxisNode.AppendChild(chartXml.CreateNode(XmlNodeType.Element, "c:minorGridlines", nsuri));
}
pck.Save();
}
我正在尝试使用 EPPlus 和 C# 创建一个 excel 图表。我可以成功创建以下图表:
我知道我可以在 Excel 中调整这些设置,但我希望能够使用我的代码设置默认网格线。我在 EPPlus 中找不到可以处理此问题的设置(如果有,请告诉我)。我想弄清楚如何直接自定义 XML 但我也遇到了麻烦。
有什么方法可以做到这一点吗?感谢任何帮助。
有点奇怪没有添加,因为它很容易打开。这是使用 XML 的方法(如果你想设置颜色和大小,你必须更多地了解 XML 操作,但这将帮助你开始):
using (var pck = new ExcelPackage(fileInfo))
{
var workbook = pck.Workbook;
var worksheet = workbook.Worksheets.Add("Sheet1");
worksheet.Cells.LoadFromDataTable(datatable, true);
var chart = worksheet.Drawings.AddChart("chart test", eChartType.XYScatter);
var series = chart.Series.Add(worksheet.Cells["B2:B11"], worksheet.Cells["A2:A11"]);
//Get reference to the worksheet xml for proper namespace
var chartXml = chart.ChartXml;
var nsuri = chartXml.DocumentElement.NamespaceURI;
var nsm = new XmlNamespaceManager(chartXml.NameTable);
nsm.AddNamespace("c", nsuri);
//XY Scatter plots have 2 value axis and no category
var valAxisNodes = chartXml.SelectNodes("c:chartSpace/c:chart/c:plotArea/c:valAx", nsm);
if (valAxisNodes != null && valAxisNodes.Count > 0)
foreach (XmlNode valAxisNode in valAxisNodes)
{
if (valAxisNode.SelectSingleNode("c:majorGridlines", nsm) == null)
valAxisNode.AppendChild(chartXml.CreateNode(XmlNodeType.Element, "c:majorGridlines", nsuri));
if (valAxisNode.SelectSingleNode("c:minorGridlines", nsm) == null)
valAxisNode.AppendChild(chartXml.CreateNode(XmlNodeType.Element, "c:minorGridlines", nsuri));
}
//Other charts can have a category axis
var catAxisNodes = chartXml.SelectNodes("c:chartSpace/c:chart/c:plotArea/c:catAx", nsm);
if (catAxisNodes != null && catAxisNodes.Count > 0)
foreach (XmlNode catAxisNode in catAxisNodes)
{
if (catAxisNode.SelectSingleNode("c:majorGridlines", nsm) == null)
catAxisNode.AppendChild(chartXml.CreateNode(XmlNodeType.Element, "c:majorGridlines", nsuri));
if (catAxisNode.SelectSingleNode("c:minorGridlines", nsm) == null)
catAxisNode.AppendChild(chartXml.CreateNode(XmlNodeType.Element, "c:minorGridlines", nsuri));
}
pck.Save();
}