簡體   English   中英

C#Open XML SDK在特定單元格引用處寫入數據

[英]C# Open XML SDK write data at specific cell reference

我有一個Excel工作表,其中的單元格引用已更改。

在此處輸入圖片說明

使用我的代碼,我可以加載Excel工作表並將數據加載到其中。 但是我希望我的數據將開始插入特定的單元格“ int_startdok”。

我的代碼:

    private byte[] LoadDataToFile([NotNull] DataTable dataTable)
    {
        if (dataTable == null) throw new ArgumentNullException(nameof(dataTable));

        var memoryStream = new MemoryStream();
        var byteArray = File.ReadAllBytes(TemplateFilePath);
        memoryStream.Write(byteArray, 0, byteArray.Length);

        using (var spreadsheetDocument = SpreadsheetDocument.Open(memoryStream, true))
        {
            var workbookPart = spreadsheetDocument.WorkbookPart;
            var worksheetPart = workbookPart.WorksheetParts.First();
            var sheetData = worksheetPart.Worksheet.Elements<SheetData>().First();

            var headerRow = new Row();

            var columns = new List<string>();
            foreach (DataColumn column in dataTable.Columns)
            {
                columns.Add(column.ColumnName);

                var cell = new Cell();
                cell.DataType = CellValues.String;
                cell.CellValue = new CellValue(column.ColumnName);
                headerRow.AppendChild(cell);
            }

            foreach (DataRow dsrow in dataTable.Rows)
            {
                var newRow = new Row();
                foreach (var col in columns)
                {
                    var cell = new Cell();
                    cell.DataType = CellValues.String;
                    cell.CellValue = new CellValue(dsrow[col].ToString());
                    newRow.AppendChild(cell);
                }

                sheetData.AppendChild(newRow);
            }
        }

        return memoryStream.ToArray();
    }

我怎樣才能做到這一點?

我為我的問題找到了解決方案。 使用ClosedXML,我可以非常輕松地完成操作並減少代碼。 對於ClosedXML,您需要Open XML SDK 您可以從ClosedXML Wiki頁面獲得它。

這是我的解決方案:

    private byte[] InsertDataToTemplate([NotNull] DataTable dataTable)
    {
        if (dataTable == null) throw new ArgumentNullException(nameof(dataTable));

        // Create a memorystream from the template
        var memoryStream = new MemoryStream();
        var byteArray = File.ReadAllBytes(TemplateFilePath);
        memoryStream.Write(byteArray, 0, byteArray.Length);

        using (var workbook = new XLWorkbook(memoryStream))
        {
            var sheetData = workbook.Worksheets.First();
            sheetData.Cell("int_startdok").InsertData(dataTable.Rows);
            workbook.Save();
        }

        return memoryStream.ToArray();
    }

暫無
暫無

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

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