Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#EPPLUS图表设置位置方法行偏移不起作用_C#_.net_Epplus - Fatal编程技术网

C#EPPLUS图表设置位置方法行偏移不起作用

C#EPPLUS图表设置位置方法行偏移不起作用,c#,.net,epplus,C#,.net,Epplus,我正在创建要导出到excel的图表。我需要创建几个,因此我将使用带有4个参数的SetPosition()方法对它们进行偏移: SetPosition(int row, int rowoffset in pixel, int col, int coloffset in pixel) 因此 问题在于,第二行偏移参数将图表拉伸350*i像素。这一定是一个错误,因为col offset 4th参数工作正常,符合预期 我需要使用startRow从工作表中的特定行单元格开始,因此我需要以某种方式获得行偏移

我正在创建要导出到excel的图表。我需要创建几个,因此我将使用带有4个参数的
SetPosition()
方法对它们进行偏移:

SetPosition(int row, int rowoffset in pixel, int col, int coloffset in pixel)
因此

问题在于,第二行偏移参数将图表拉伸350*i像素。这一定是一个错误,因为col offset 4th参数工作正常,符合预期

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


有什么想法吗?

行偏移量和列偏移量也给我带来了麻烦,我避免在该函数中使用它们。如果你看一下源代码,你可以看到它与图表的高度/宽度做了很多匹配,因此它似乎比设置和上/左位置做得更多。我还没有进行完全的逆向工程

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

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();
}
使用(var pck=new ExcelPackage(fi))
{
var工作簿=pck.工作簿;
var工作表=工作簿。工作表。添加(“表1”);
工作表.Cells.LoadFromDataTable(datatable,true);
//设置特定值以使其可预测
const int EXCELCHARTWIDTH=375;
const int excelChart高度=350;
//必须采用标准屏幕dpi,但可由用户自定义
const-double-EXCELDEFAULTROWHEIGHT=20.0;
var startCell=(ExcelRangeBase)工作表。单元格[“A1”];
对于(变量i=0;i<10;i++)
{
var图表=工作表.draws.AddChart(“图表”+i,eChartType.Pie);
图表.设置大小(EXCELCHARTWIDTH,EXCELCHARTHEIGHT);
chart.SetPosition(startCell.Start.Row,0,startCell.Start.Column,0);
var chartcellheight=(int)数学天花板(EXCELCHARTHEIGHT/EXCELDEFAULTROWHEIGHT);
startCell=startCell.Offset(图表单元格高度,0);
}
pck.Save();
}

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

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

chart.SetPosition(row , 10, col, 32);
还请注意,如果从.RowOff中读取位置,则需要将其除以9525

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