C#EPPLUS图表SetPosition方法行偏移不起作用

时间:2015-11-13 01:20:52

标签: c# .net epplus

我正在创建一个导出到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偏移第4个参数工作正常并且符合预期。

我需要使用startRow从工作表中的特定行单元格开始,所以我需要以某种方式使行偏移量工作。

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

RowOffsetColumnOffset也给了我麻烦,我避免在该功能中使用它们。如果您查看源代码,您可以看到它与图表高度/宽度匹配很多,所以它似乎做了更多,然后设置和上/左位置。我还没有完全反向设计它。

我自己做数学。知道默认的行高(以像素为单位)是唯一需要注意的事项,因为这可以由用户自定义,您在设计时无法知道这就是我的工作:

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();
}

答案 1 :(得分:0)

偏移量是一个单元格内的偏移量。

因此,如果您的单元格为64 x 20像素(默认),则通常不应超过64或20像素。要将图表的左上角设置在单元格的中间,请调用:

chart.SetPosition(row , 10, col, 32);

还请注意,如果您从From.RowOff中读取该职位,则需要将其除以9525