C# EPPLUS Chart SetPosition 方法行偏移不起作用
C# EPPLUS Chart SetPosition Method Row Offset does not work
我正在创建要导出到 excel 的图表。我需要创建几个,所以我会使用带有 4 个参数的 SetPosition()
方法来抵消它们:
SetPosition(int row, int rowoffset in pixel, int col, int coloffset in pixel)
因此
chart.SetPosition(startRow, 350*i, 0, 50);
问题是第二行偏移参数将图表拉伸了 350*i 个像素。这一定是一个错误,因为 col offset 第 4 个参数工作正常并且符合预期。
我需要使用 startRow 从 sheet 中的特定行单元格开始,因此我需要让行偏移以某种方式起作用。
有什么想法吗?
RowOffset
和 ColumnOffset
也给我带来了麻烦,我避免在该函数中使用它们。如果您查看源代码,您是否可以看到它与图表 height/width 做了很多匹配,所以它似乎比设置和 top/left 位置做的更多。我还没有努力对它进行完全逆向工程。
我只是自己算算。知道以像素为单位的默认行高是您唯一需要注意的事情,因为这可以由用户自定义,而您在设计时无法知道这就是我所做的:
using (var pck = new ExcelPackage(fi))
{
var workbook = pck.Workbook;
var worksheet = workbook.Worksheets.Add("Sheet1");
worksheet.Cells.LoadFromDataTable(datatable, true);
//Set specific values to make predictable
const int EXCELCHARTWIDTH = 375;
const int EXCELCHARTHEIGHT = 350;
//Have to assume a standard screen dpi but can be customized by the user
const double EXCELDEFAULTROWHEIGHT = 20.0;
var startCell = (ExcelRangeBase)worksheet.Cells["A1"];
for (var i = 0; i < 10; i++)
{
var chart = worksheet.Drawings.AddChart("chart " + i, eChartType.Pie);
chart.SetSize(EXCELCHARTWIDTH, EXCELCHARTHEIGHT);
chart.SetPosition(startCell.Start.Row, 0, startCell.Start.Column, 0);
var chartcellheight = (int)Math.Ceiling(EXCELCHARTHEIGHT / EXCELDEFAULTROWHEIGHT);
startCell = startCell.Offset(chartcellheight, 0);
}
pck.Save();
}
偏移量是一个单元格内的偏移量。
因此,如果您有一个 64 x 20 像素(默认)的单元格,它通常不应超过 64 或 20。要将图表的左上角设置在单元格的中间,请调用:
chart.SetPosition(row , 10, col, 32);
还要注意,如果从From.RowOff
读取位置,需要除以9525
我正在创建要导出到 excel 的图表。我需要创建几个,所以我会使用带有 4 个参数的 SetPosition()
方法来抵消它们:
SetPosition(int row, int rowoffset in pixel, int col, int coloffset in pixel)
因此
chart.SetPosition(startRow, 350*i, 0, 50);
问题是第二行偏移参数将图表拉伸了 350*i 个像素。这一定是一个错误,因为 col offset 第 4 个参数工作正常并且符合预期。
我需要使用 startRow 从 sheet 中的特定行单元格开始,因此我需要让行偏移以某种方式起作用。
有什么想法吗?
RowOffset
和 ColumnOffset
也给我带来了麻烦,我避免在该函数中使用它们。如果您查看源代码,您是否可以看到它与图表 height/width 做了很多匹配,所以它似乎比设置和 top/left 位置做的更多。我还没有努力对它进行完全逆向工程。
我只是自己算算。知道以像素为单位的默认行高是您唯一需要注意的事情,因为这可以由用户自定义,而您在设计时无法知道这就是我所做的:
using (var pck = new ExcelPackage(fi))
{
var workbook = pck.Workbook;
var worksheet = workbook.Worksheets.Add("Sheet1");
worksheet.Cells.LoadFromDataTable(datatable, true);
//Set specific values to make predictable
const int EXCELCHARTWIDTH = 375;
const int EXCELCHARTHEIGHT = 350;
//Have to assume a standard screen dpi but can be customized by the user
const double EXCELDEFAULTROWHEIGHT = 20.0;
var startCell = (ExcelRangeBase)worksheet.Cells["A1"];
for (var i = 0; i < 10; i++)
{
var chart = worksheet.Drawings.AddChart("chart " + i, eChartType.Pie);
chart.SetSize(EXCELCHARTWIDTH, EXCELCHARTHEIGHT);
chart.SetPosition(startCell.Start.Row, 0, startCell.Start.Column, 0);
var chartcellheight = (int)Math.Ceiling(EXCELCHARTHEIGHT / EXCELDEFAULTROWHEIGHT);
startCell = startCell.Offset(chartcellheight, 0);
}
pck.Save();
}
偏移量是一个单元格内的偏移量。
因此,如果您有一个 64 x 20 像素(默认)的单元格,它通常不应超过 64 或 20。要将图表的左上角设置在单元格的中间,请调用:
chart.SetPosition(row , 10, col, 32);
还要注意,如果从From.RowOff
读取位置,需要除以9525