【问题标题】:asp.net OpenXML insert data to cellasp.net OpenXML 向单元格插入数据
【发布时间】:2015-06-03 08:45:34
【问题描述】:

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

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

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

我尝试了这篇文章 Using OpenXML to insert a datatable into excel 中的代码,但它创建了一个损坏的 excel 文件。 这就是我的代码在没有链接中的辅助函数的情况下的样子

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

【问题讨论】:

  • 你只是想设置单元格数据,对吗?
  • 是的,我只是想设置单元格数据
  • 我用过这个stackoverflow.com/questions/6072456/…,我喜欢那个帖子里的答案,根据我的需要修改。效果很好!
  • @Dreamweaver 该示例不起作用。我得到一个对象未​​设置为WorksheetPart worksheetPart = workbookPart.WorksheetParts.Last();上的对象实例@

标签: asp.net asp.net-mvc openxml


【解决方案1】:

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

【讨论】:

  • 感谢@petelids 的回答。你的样本引导了我正确的方式
猜你喜欢
  • 2010-10-18
  • 2013-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-19
  • 1970-01-01
  • 2017-01-28
  • 2017-05-29
相关资源
最近更新 更多