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
创建一个全新的文件。当您创建一个全新的文件时,您必须创建某些元素才能使文件有效。您缺少的元素是 Sheets
和 Sheet
元素。
Sheets
与 SheetData
分开存储,因此您需要在 Sheets
中创建一个 Sheet
,然后将 Sheets
与 WorksheetPart
.
可以这样做:
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"
});
}
我一直在按照本指南 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
创建一个全新的文件。当您创建一个全新的文件时,您必须创建某些元素才能使文件有效。您缺少的元素是 Sheets
和 Sheet
元素。
Sheets
与 SheetData
分开存储,因此您需要在 Sheets
中创建一个 Sheet
,然后将 Sheets
与 WorksheetPart
.
可以这样做:
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"
});
}