asp.net OpenXML 向单元格插入数据

asp.net OpenXML insert data to cell

我一直在按照本指南 https://msdn.microsoft.com/EN-US/library/office/cc861607.aspx 将字符串插入 excel 文件中的单元格。该示例确实令人困惑,即使我 copy/paste 它也不起作用。我正在寻找一个非常简单的示例来将值插入单元格,例如:

spredSheet.InsertCell("A", 1, string value)

我真的可以使用一个简单的代码示例向我展示如何在 asp.net 中使用 OpenXML 将数据插入单元格。

我尝试了此 post Using OpenXML to insert a datatable into excel 中的代码,但它创建了一个损坏的 excel 文件。 这是我的代码在没有 link

的辅助函数的情况下的样子
using (SpreadsheetDocument myDoc = SpreadsheetDocument.
            Create(Server.MapPath("/data.xls"), SpreadsheetDocumentType.Workbook))
        {
            WorkbookPart workbookpart = myDoc.AddWorkbookPart();
            workbookpart.Workbook = new Workbook();

            // Add a WorksheetPart to the WorkbookPart.
            WorksheetPart worksheetPart = workbookpart.AddNewPart<WorksheetPart>();
            //add column names to the first row  
            Row header = new Row();
            header.RowIndex = (UInt32)1;
            SheetData sheetData = new SheetData();


                Cell headerCell = createTextCell(1, 1, text);
                header.AppendChild(headerCell);

            sheetData.AppendChild(header);
            // Add a WorkbookPart to the document.
            worksheetPart.Worksheet = new Worksheet(sheetData);
        }

MSDN 示例使用 SpreadsheetDocument.Open 打开一个 现有 文件,但您正在使用 SpreadsheetDocument.Create 创建一个全新的文件。当您创建一个全新的文件时,您必须创建某些元素才能使文件有效。您缺少的元素是 SheetsSheet 元素。

SheetsSheetData 分开存储,因此您需要在 Sheets 中创建一个 Sheet,然后将 SheetsWorksheetPart.

可以这样做:

Sheets sheets = myDoc.WorkbookPart.Workbook.AppendChild(new Sheets());
sheets.AppendChild(new Sheet()
{
    Id = myDoc.WorkbookPart.GetIdOfPart(myDoc.WorkbookPart.WorksheetParts.First()),
    SheetId = 1,
    Name = "Sheet1"
});

所以你的完整代码清单应该是这样的:

using (SpreadsheetDocument myDoc = SpreadsheetDocument.
       Create(Server.MapPath("/data.xls"), SpreadsheetDocumentType.Workbook))
{
    WorkbookPart workbookpart = myDoc.AddWorkbookPart();
    workbookpart.Workbook = new Workbook();

    // Add a WorksheetPart to the WorkbookPart.
    WorksheetPart worksheetPart = workbookpart.AddNewPart<WorksheetPart>();
    //add column names to the first row  
    Row header = new Row();
    header.RowIndex = (UInt32)1;
    SheetData sheetData = new SheetData();

    Cell headerCell = createTextCell(1, 1, text);
    header.AppendChild(headerCell);

    sheetData.AppendChild(header);
    // Add a WorkbookPart to the document.
    worksheetPart.Worksheet = new Worksheet(sheetData);

    //this is the part that was missing from your code
    Sheets sheets = myDoc.WorkbookPart.Workbook.AppendChild(new Sheets());
    sheets.AppendChild(new Sheet()
    {
        Id = myDoc.WorkbookPart.GetIdOfPart(myDoc.WorkbookPart.WorksheetParts.First()),
        SheetId = 1,
        Name = "Sheet1"
    });
}