使用OpenXmlWriter SAX创建带有样式标记的Excel文件

时间:2015-02-17 11:01:58

标签: c# excel openxml

我正在尝试使用OpenXmlWriter(SAX)编写带有样式的Excel Xlsx电子表格。

我能够创建包含行和列的文件(将它们填充为字符串)。 我正在寻找一个简单的代码,介绍如何用粗体字创建第一行(标题)。

我没有模板文件,因为文件是动态的。

我发现了一些关于如何添加WorkbookStylesPart的文章,但他们都在使用DOM。由于我需要编写大量的行,因此DOM不适用于我。

有人能指出我正确的方向吗? 使用WriteStartElement和OpenXmlAttribute时将标题行添加为粗体的简单代码。

谢谢,odansky

2 个答案:

答案 0 :(得分:9)

添加StyleSheet是一次性工作。之后,您只需在创建新单元格时简单地引用已定义的样式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();
}

答案 1 :(得分:0)

您可以按照设置单元格数据类型的方式来设置样式索引:

oxa.Add(new OpenXmlAttribute("s", null, "1"));