使用 OpenXmlWriter SAX 创建带有样式标签的 Excel 文件
Create Excel file with style tag using OpenXmlWriter SAX
我正在尝试使用 OpenXmlWriter (SAX) 编写带有样式的 Excel Xlsx 电子表格。
我能够创建包含行和列的文件(将它们填充为字符串)。
我正在寻找一个关于如何使用粗体制作第一行 (header) 的简单代码。
我没有模板文件开始,因为该文件是动态的。
我找到了几篇关于如何添加 WorkbookStylesPart 的文章,但他们都在使用 DOM。因为我需要写大量的行,所以 DOM 对我不起作用。
谁能指出我正确的方向?
使用 WriteStartElement 和 OpenXmlAttribute 时将 header 行添加为粗体的简单代码。
谢谢,奥丹斯基
添加样式表是一次性的工作。之后,您只需要在创建新单元格时简单地引用定义的样式 ID。
向电子表格添加样式表的热门话题[使用粗体文本样式]
private WorkbookStylesPart AddStyleSheet(SpreadsheetDocument spreadsheet)
{
WorkbookStylesPart stylesheet = spreadsheet.WorkbookPart.AddNewPart<WorkbookStylesPart>();
Stylesheet workbookstylesheet = new Stylesheet();
Font font0 = new Font(); // Default font
Font font1 = new Font(); // Bold font
Bold bold = new Bold();
font1.Append(bold);
Fonts fonts = new Fonts(); // <APENDING Fonts>
fonts.Append(font0);
fonts.Append(font1);
// <Fills>
Fill fill0 = new Fill(); // Default fill
Fills fills = new Fills(); // <APENDING Fills>
fills.Append(fill0);
// <Borders>
Border border0 = new Border(); // Defualt border
Borders borders = new Borders(); // <APENDING Borders>
borders.Append(border0);
// <CellFormats>
CellFormat cellformat0 = new CellFormat() { FontId = 0, FillId = 0, BorderId = 0 }; // Default style : Mandatory | Style ID =0
CellFormat cellformat1 = new CellFormat() { FontId = 1 }; // Style with Bold text ; Style ID = 1
// <APENDING CellFormats>
CellFormats cellformats = new CellFormats();
cellformats.Append(cellformat0);
cellformats.Append(cellformat1);
// Append FONTS, FILLS , BORDERS & CellFormats to stylesheet <Preserve the ORDER>
workbookstylesheet.Append(fonts);
workbookstylesheet.Append(fills);
workbookstylesheet.Append(borders);
workbookstylesheet.Append(cellformats);
// Finalize
stylesheet.Stylesheet = workbookstylesheet;
stylesheet.Stylesheet.Save();
return stylesheet;
}
现在,当您创建单元格时,请执行以下操作以引用粗体文本
Cell c1 = new Cell(){StyleIndex = Convert.ToUInt32(1)}; // Assign our defined style with Bold text ; Style ID 1
补充说明:您需要在添加电子表格的工作簿部分后添加样式表。
有关 SAX 方法的更多信息:您可以在首次创建要打开以插入数据单元格的模板文件时定义样式。并且在添加数据单元格时使用 ID 引用定义的样式。
具有样式 (MSDN)
的简单工作电子表格
public static void CreateSpreadsheetWorkbook(string filepath)
{
// Create a spreadsheet document by supplying the filepath.
// By default, AutoSave = true, Editable = true, and Type = xlsx.
SpreadsheetDocument spreadsheetDocument = SpreadsheetDocument.Create(filepath, SpreadsheetDocumentType.Workbook);
// Add a WorkbookPart to the document.
WorkbookPart workbookpart = spreadsheetDocument.AddWorkbookPart();
workbookpart.Workbook = new Workbook();
AddStyleSheet(spreadsheetDocument) // <== Adding stylesheet using above function
// Add a WorksheetPart to the WorkbookPart.
WorksheetPart worksheetPart = workbookpart.AddNewPart<WorksheetPart>();
worksheetPart.Worksheet = new Worksheet(new SheetData());
// Add Sheets to the Workbook.
Sheets sheets = spreadsheetDocument.WorkbookPart.Workbook.AppendChild<Sheets>(new Sheets());
// Append a new worksheet and associate it with the workbook.
Sheet sheet = new Sheet() { Id = spreadsheetDocument.WorkbookPart.GetIdOfPart(worksheetPart), SheetId = 1, Name = "mySheet" };
sheets.Append(sheet);
workbookpart.Workbook.Save();
// Close the document.
spreadsheetDocument.Close();
}
设置样式索引的方式与设置单元格数据类型的方式相同:
oxa.Add(new OpenXmlAttribute("s", null, "1"));
我正在尝试使用 OpenXmlWriter (SAX) 编写带有样式的 Excel Xlsx 电子表格。
我能够创建包含行和列的文件(将它们填充为字符串)。 我正在寻找一个关于如何使用粗体制作第一行 (header) 的简单代码。
我没有模板文件开始,因为该文件是动态的。
我找到了几篇关于如何添加 WorkbookStylesPart 的文章,但他们都在使用 DOM。因为我需要写大量的行,所以 DOM 对我不起作用。
谁能指出我正确的方向? 使用 WriteStartElement 和 OpenXmlAttribute 时将 header 行添加为粗体的简单代码。
谢谢,奥丹斯基
添加样式表是一次性的工作。之后,您只需要在创建新单元格时简单地引用定义的样式 ID。
向电子表格添加样式表的热门话题[使用粗体文本样式]
private WorkbookStylesPart AddStyleSheet(SpreadsheetDocument spreadsheet)
{
WorkbookStylesPart stylesheet = spreadsheet.WorkbookPart.AddNewPart<WorkbookStylesPart>();
Stylesheet workbookstylesheet = new Stylesheet();
Font font0 = new Font(); // Default font
Font font1 = new Font(); // Bold font
Bold bold = new Bold();
font1.Append(bold);
Fonts fonts = new Fonts(); // <APENDING Fonts>
fonts.Append(font0);
fonts.Append(font1);
// <Fills>
Fill fill0 = new Fill(); // Default fill
Fills fills = new Fills(); // <APENDING Fills>
fills.Append(fill0);
// <Borders>
Border border0 = new Border(); // Defualt border
Borders borders = new Borders(); // <APENDING Borders>
borders.Append(border0);
// <CellFormats>
CellFormat cellformat0 = new CellFormat() { FontId = 0, FillId = 0, BorderId = 0 }; // Default style : Mandatory | Style ID =0
CellFormat cellformat1 = new CellFormat() { FontId = 1 }; // Style with Bold text ; Style ID = 1
// <APENDING CellFormats>
CellFormats cellformats = new CellFormats();
cellformats.Append(cellformat0);
cellformats.Append(cellformat1);
// Append FONTS, FILLS , BORDERS & CellFormats to stylesheet <Preserve the ORDER>
workbookstylesheet.Append(fonts);
workbookstylesheet.Append(fills);
workbookstylesheet.Append(borders);
workbookstylesheet.Append(cellformats);
// Finalize
stylesheet.Stylesheet = workbookstylesheet;
stylesheet.Stylesheet.Save();
return stylesheet;
}
现在,当您创建单元格时,请执行以下操作以引用粗体文本
Cell c1 = new Cell(){StyleIndex = Convert.ToUInt32(1)}; // Assign our defined style with Bold text ; Style ID 1
补充说明:您需要在添加电子表格的工作簿部分后添加样式表。
有关 SAX 方法的更多信息:您可以在首次创建要打开以插入数据单元格的模板文件时定义样式。并且在添加数据单元格时使用 ID 引用定义的样式。
具有样式 (MSDN)
的简单工作电子表格public static void CreateSpreadsheetWorkbook(string filepath)
{
// Create a spreadsheet document by supplying the filepath.
// By default, AutoSave = true, Editable = true, and Type = xlsx.
SpreadsheetDocument spreadsheetDocument = SpreadsheetDocument.Create(filepath, SpreadsheetDocumentType.Workbook);
// Add a WorkbookPart to the document.
WorkbookPart workbookpart = spreadsheetDocument.AddWorkbookPart();
workbookpart.Workbook = new Workbook();
AddStyleSheet(spreadsheetDocument) // <== Adding stylesheet using above function
// Add a WorksheetPart to the WorkbookPart.
WorksheetPart worksheetPart = workbookpart.AddNewPart<WorksheetPart>();
worksheetPart.Worksheet = new Worksheet(new SheetData());
// Add Sheets to the Workbook.
Sheets sheets = spreadsheetDocument.WorkbookPart.Workbook.AppendChild<Sheets>(new Sheets());
// Append a new worksheet and associate it with the workbook.
Sheet sheet = new Sheet() { Id = spreadsheetDocument.WorkbookPart.GetIdOfPart(worksheetPart), SheetId = 1, Name = "mySheet" };
sheets.Append(sheet);
workbookpart.Workbook.Save();
// Close the document.
spreadsheetDocument.Close();
}
设置样式索引的方式与设置单元格数据类型的方式相同:
oxa.Add(new OpenXmlAttribute("s", null, "1"));