基于模板创建Excel报告

时间:2017-10-04 09:15:31

标签: c# epplus

我有一个Excel模板,其中指定了表头,数据部分和表格页脚的格式。这些部分可能包含图像,合并单元格等。 需要映射数据的单元格是命名单元格。 我尝试使用EPPlus库根据Excel模板生成报告。 我使用以下代码片段来复制单元格范围

 var worksheet = destExcelPackage.Workbook.Worksheets.Add("Sheet 1");
 var sourceRange = sourceExcelPackage.Workbook.Worksheets.First().Cells["B6:P11"];
 sourceRange.Copy(worksheet.Cells["A1"]);

但这并没有使列宽等于源。我必须将列宽设置为源宽度

var startCol = sourceRange.Start.Column;
var endCol = sourceRange.End.Column;

for (int j = startCol, destCol = 1; j <= endCol; j++, destCol++)
{
   worksheet.Column(destCol).Width = sourceExcelPackage.Workbook.Worksheets.First().Column(j).Width;
}

我有以下问题:

  1. 有没有更好的方法将列宽设置为等于源?
  2. 复制的单元格有图像,但没有复制到新图纸。如何复制图像?
  3. 如何识别Excel工作表中的命名单元格,以便我可以从某个数据源为单元格设置值?

1 个答案:

答案 0 :(得分:0)

我找到了实现上述第2点和第3点的方法。 看来,如果图片被命名,则很容易阅读。 所以#2

CASE WHEN (<subquery>) IS NOT NULL THEN (<subquery>) ELSE 0 END

对于#3

    private static void CopyImage(ExcelPackage sourceExcelPackage, ExcelWorksheet destWorksheet)
    {
        var image = GetImage("Pic01", sourceExcelPackage);
        ExcelPicture pic = destWorksheet.Drawings.AddPicture("Pic01", image.Image);
        pic.From.Column = image.From.Column;
        pic.From.Row = image.From.Row;
        pic.To.Column = image.To.Column;
        pic.To.Row = image.To.Row;
        var destRow = 1;
        var destCol = 1;
        pic.SetPosition(destRow, Pixel2MTU(image.From.RowOff), destCol, Pixel2MTU(image.From.ColumnOff));
        pic.EditAs = eEditAs.TwoCell;
        pic.AdjustPositionAndSize();
    }

    private static ExcelPicture GetImage(string pictureName, ExcelPackage excelFile)
    {
        var sheet = excelFile.Workbook.Worksheets.First();
        var pic = sheet.Drawings[pictureName] as ExcelPicture;
        return pic;
    }

    private static int Pixel2MTU(int fromRowOff)
    {
        return fromRowOff / ExcelDrawing.EMU_PER_PIXEL;
    }

将返回名为headerName的单元格。