如何使用 C# 设置 Excel 饼图的数据标签位置?
How can I set the Data Label position for an Excel pie chart using C#?
我正在创建一个 Excel 导出,其中包含多个饼图,这些饼图是根据数据库中的数据动态创建的,这些数据被转储到电子表格中的一系列单元格中。我需要饼图的数据标签位于饼图的外端。默认情况下,数据标签设置为最适合。
我曾尝试使用 eLabelPosition
来操纵数据标签位置,其中有一个 OutEnd
属性 但没有成功。这样做会导致数据标签完全消失。
以下是我用来生成饼图的方法。
private void AddPieChart(ExcelWorksheet worksheet, int firstDataRow, int firstDataColumn, int lastDataRow, int nextColumn, int firstColumn)
{
ExcelPieChart pieChart = worksheet.Drawings.AddChart(worksheet.Name.ToString() + " Pie Chart", eChartType.Pie3D) as ExcelPieChart;
var serie = pieChart.Series.Add(ExcelCellBase.GetAddress(firstDataRow + 3, firstDataColumn, lastDataRow + 3, firstDataColumn),
ExcelCellBase.GetAddress(firstDataRow + 3, firstColumn, lastDataRow + 3, firstColumn));
pieChart.DataLabel.ShowCategory = true;
pieChart.DataLabel.ShowLeaderLines = true;
pieChart.DataLabel.Font.Bold = true;
pieChart.DataLabel.Font.Size = 12;
pieChart.Legend.Remove();
pieChart.SetSize(500, 350);
pieChart.SetPosition(lastDataRow + 5, 0, nextColumn - 1, 0);
pieChart.Border.Fill.Color = Color.White;
pieChart.Series.Chart.RoundedCorners = false;
var pieSerie = (ExcelPieChartSerie)serie;
pieSerie.DataLabel.Position = eLabelPosition.OutEnd;
}
看来,如果您已将 DataLabel
属性分配给 ExcelPieChart
,然后还尝试在 ExcelPieChartSerie
上分配 DataLabel
属性,则不适用属性 到 ExcelPieChartSerie
。为了解决这个问题,删除 ExcelPieChart
上的任何 DataLabel
属性,而是将它们添加到 ExcelPieChartSerie
中,如下所示。
private void AddPieChart(ExcelWorksheet worksheet, int firstDataRow, int firstDataColumn, int lastDataRow, int nextColumn, int firstColumn)
{
ExcelPieChart pieChart = worksheet.Drawings.AddChart(worksheet.Name.ToString() + " Pie Chart", eChartType.Pie3D) as ExcelPieChart;
var serie = pieChart.Series.Add(ExcelCellBase.GetAddress(firstDataRow + 3, firstDataColumn, lastDataRow + 3, firstDataColumn),
ExcelCellBase.GetAddress(firstDataRow + 3, firstColumn, lastDataRow + 3, firstColumn));
pieChart.Legend.Remove();
pieChart.SetSize(500, 350);
pieChart.SetPosition(lastDataRow + 5, 0, nextColumn - 1, 0);
pieChart.Border.Fill.Color = Color.White;
pieChart.Series.Chart.RoundedCorners = false;
var pieSerie = (ExcelPieChartSerie)serie;
pieSerie.DataLabel.ShowCategory = true;
pieSerie.DataLabel.ShowLeaderLines = true;
pieSerie.DataLabel.Font.Bold = true;
pieSerie.DataLabel.Font.Size = 12;
pieSerie.DataLabel.Position = eLabelPosition.OutEnd;
}
我正在创建一个 Excel 导出,其中包含多个饼图,这些饼图是根据数据库中的数据动态创建的,这些数据被转储到电子表格中的一系列单元格中。我需要饼图的数据标签位于饼图的外端。默认情况下,数据标签设置为最适合。
我曾尝试使用 eLabelPosition
来操纵数据标签位置,其中有一个 OutEnd
属性 但没有成功。这样做会导致数据标签完全消失。
以下是我用来生成饼图的方法。
private void AddPieChart(ExcelWorksheet worksheet, int firstDataRow, int firstDataColumn, int lastDataRow, int nextColumn, int firstColumn)
{
ExcelPieChart pieChart = worksheet.Drawings.AddChart(worksheet.Name.ToString() + " Pie Chart", eChartType.Pie3D) as ExcelPieChart;
var serie = pieChart.Series.Add(ExcelCellBase.GetAddress(firstDataRow + 3, firstDataColumn, lastDataRow + 3, firstDataColumn),
ExcelCellBase.GetAddress(firstDataRow + 3, firstColumn, lastDataRow + 3, firstColumn));
pieChart.DataLabel.ShowCategory = true;
pieChart.DataLabel.ShowLeaderLines = true;
pieChart.DataLabel.Font.Bold = true;
pieChart.DataLabel.Font.Size = 12;
pieChart.Legend.Remove();
pieChart.SetSize(500, 350);
pieChart.SetPosition(lastDataRow + 5, 0, nextColumn - 1, 0);
pieChart.Border.Fill.Color = Color.White;
pieChart.Series.Chart.RoundedCorners = false;
var pieSerie = (ExcelPieChartSerie)serie;
pieSerie.DataLabel.Position = eLabelPosition.OutEnd;
}
看来,如果您已将 DataLabel
属性分配给 ExcelPieChart
,然后还尝试在 ExcelPieChartSerie
上分配 DataLabel
属性,则不适用属性 到 ExcelPieChartSerie
。为了解决这个问题,删除 ExcelPieChart
上的任何 DataLabel
属性,而是将它们添加到 ExcelPieChartSerie
中,如下所示。
private void AddPieChart(ExcelWorksheet worksheet, int firstDataRow, int firstDataColumn, int lastDataRow, int nextColumn, int firstColumn)
{
ExcelPieChart pieChart = worksheet.Drawings.AddChart(worksheet.Name.ToString() + " Pie Chart", eChartType.Pie3D) as ExcelPieChart;
var serie = pieChart.Series.Add(ExcelCellBase.GetAddress(firstDataRow + 3, firstDataColumn, lastDataRow + 3, firstDataColumn),
ExcelCellBase.GetAddress(firstDataRow + 3, firstColumn, lastDataRow + 3, firstColumn));
pieChart.Legend.Remove();
pieChart.SetSize(500, 350);
pieChart.SetPosition(lastDataRow + 5, 0, nextColumn - 1, 0);
pieChart.Border.Fill.Color = Color.White;
pieChart.Series.Chart.RoundedCorners = false;
var pieSerie = (ExcelPieChartSerie)serie;
pieSerie.DataLabel.ShowCategory = true;
pieSerie.DataLabel.ShowLeaderLines = true;
pieSerie.DataLabel.Font.Bold = true;
pieSerie.DataLabel.Font.Size = 12;
pieSerie.DataLabel.Position = eLabelPosition.OutEnd;
}