簡體   English   中英

根據模板創建Excel報告

[英]Creating an Excel report based on template

我有一個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工作表中標識命名的單元格,以便可以從某些數據源為單元格設置值?

我已經找到一種實現上述第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的單元格。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM