[英]C# How do I append a Cell to every Row in a Excel Sheet using OpenXmlWriter (OpenXML SDK 2.5)
[英]How do I add a new sheet to an Excel .xlsx file using the OpenXML SDK v2.0 with c#?
刚刚发布了我今天制定的解决方案。 请参阅下面的答案。
如果您没有非常有用的OpenXML SDK v2.0工具,则可以在以下网址找到它: http://www.microsoft.com/downloads/details.aspx? FamilyID=C6E744E5-36E9-45F5-8D8C-331DF206E0D0&displaylang=en
如果您知道我用“我不知道...”注释的行的目的,请留下评论以解释它们。
using (SpreadsheetDocument spreadsheetDocument = SpreadsheetDocument.Open(spreadSheetFileName, true)) {
WorkbookPart workbookPart = spreadsheetDocument.WorkbookPart;
// rId must be unique within the spreadsheet.
// You might be able to use the SpreadSheetDocument.Parts.Count() to do this.
// i.e. string relationshipID = "rId" + (spreadsheetDocument.Parts.Count() + 1).ToString();
string rId = "rId6";
// Sheet.Name and Sheet.SheetId must be unique within the spreadsheet.
Sheet sheet = new Sheet() { Name = "Sheet4", SheetId = 4U, Id = rId };
workbookPart.Workbook.Sheets.Append(sheet);
WorksheetPart worksheetPart = workbookPart.AddNewPart<WorksheetPart>(rId);
Worksheet worksheet = new Worksheet();
worksheet.AddNamespaceDeclaration("r", "http://schemas.openxmlformats.org/officeDocument/2006/relationships");
// I don't know what SheetDimension.Reference is used for, it doesn't seem to change the resulting xml.
SheetDimension sheetDimension = new SheetDimension() { Reference = "A1:A3" };
SheetViews sheetViews = new SheetViews();
// If more than one SheetView.TabSelected is set to true, it looks like Excel just picks the first one.
SheetView sheetView = new SheetView() { TabSelected = false, WorkbookViewId = 0U };
// I don't know what Selection.ActiveCell is used for, it doesn't seem to change the resulting xml.
Selection selection = new Selection() { ActiveCell = "A1", SequenceOfReferences = new ListValue<StringValue>() { InnerText = "A1" } };
sheetView.Append(selection);
sheetViews.Append(sheetView);
SheetFormatProperties sheetFormatProperties = new SheetFormatProperties() { DefaultRowHeight = 15D };
SheetData sheetData = new SheetData();
// I don't know what the InnerText of Row.Spans is used for. It doesn't seem to change the resulting xml.
Row row = new Row() { RowIndex = 1U, Spans = new ListValue<StringValue>() { InnerText = "1:3" } };
Cell cell1 = new Cell() { CellReference = "A1", DataType = CellValues.Number, CellValue = new CellValue("99") };
Cell cell2 = new Cell() { CellReference = "B1", DataType = CellValues.Number, CellValue = new CellValue("55") };
Cell cell3 = new Cell() { CellReference = "C1", DataType = CellValues.Number, CellValue = new CellValue("33") };
row.Append(cell1);
row.Append(cell2);
row.Append(cell3);
sheetData.Append(row);
PageMargins pageMargins = new PageMargins() { Left = 0.7D, Right = 0.7D, Top = 0.7D, Bottom = 0.75D, Header = 0.3D, Footer = 0.3D };
worksheet.Append(sheetDimension);
worksheet.Append(sheetViews);
worksheet.Append(sheetFormatProperties);
worksheet.Append(sheetData);
worksheet.Append(pageMargins);
worksheetPart.Worksheet = worksheet;
}
(1)我不知道Selection.ActiveCell用于什么
Excel打开时,ActiveCell周围有一个焦点矩形。 打开新电子表格时,A1是ActivCell的默认值。 可以使用Selection.ActiveCell将ActiveCell设置为任何单元格
(2)我不知道将SheetDimension.Reference用于什么
SheetDimension.Reference包含一个范围,例如“ A4:BA25”。A4是第一个具有值的单元格,BA25是最后一个单元格。 我不完全知道Excel如何使用此信息,但是OpenXml不会为空行,列和单元格维护xml。 SheetDimension.Reference指示没有单元格的值在A4之前,没有单元格的值在BA25之后
我不知道什么Selection.ActiveCell用于
Excel打开时,ActiveCell周围有一个焦点矩形。 创建新电子表格时,A1是ActivCell默认值。 可以使用Selection.ActiveCell将ActiveCell设置为任何单元格
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.