【问题标题】:Creating an Excel report based on template基于模板创建 Excel 报表
【发布时间】:2017-10-04 09:15:30
【问题描述】:

我有一个 Excel 模板,其中指定了表格标题、数据部分和表格页脚的格式。这些部分可能有图像、合并的单元格等。 需要映射数据的单元称为命名单元。 我尝试使用 EPPlus 库来生成基于 Excel 模板的报告。 我使用以下sn-p复制单元格范围

 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 工作表中的命名单元格,以便我可以从某个数据源为单元格设置值?

【问题讨论】:

    标签: c# epplus


    【解决方案1】:

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

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

    对于#3

    var cell = sourceExcelPackage.Workbook.Names?.Where(item => item.Name==headerName).FirstOrDefault();
    

    将返回名为 headerName 的单元格。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-13
      • 1970-01-01
      相关资源
      最近更新 更多