打开XML SDK:格式化Excel单元格的一部分

DocumentFormat.OpenXml.Spreadsheet使用Open XML for Excel,如何只将部分文本设置为粗体?

 var cell = new Cell { //DataType = CellValues.InlineString, CellReference = "A" + 1 }; // TODO: Set "bold text" to bold style //var inlineString = new InlineString(); //inlineString.AppendChild(new Text { Text = "Normal text... bold text..." }); //cell.AppendChild(inlineString); 

注释掉现在使用的代码,但是应该或者应该更改。

为了仅将部分文本设置为粗体,您需要通过将文本插入到SharedStringTable来控制该文本,并使您的单元格的数据types为SharedString而不是InlineString 。 这将使CellValue成为这个表中的引用,如0,1,2等,并允许更多的控制,然后做一个内联string。

下面是一些关于如何使“普通文本…粗体文本…”粗体的第二部分的示例代码:

  // Creates an SharedStringItem instance and adds its children. public SharedStringItem GenerateSharedStringItem() { SharedStringItem sharedStringItem1 = new SharedStringItem(); Run run1 = new Run(); Text text1 = new Text(){ Space = SpaceProcessingModeValues.Preserve }; text1.Text = "Normal text… "; run1.Append(text1); Run run2 = new Run(); RunProperties runProperties1 = new RunProperties(); Bold bold1 = new Bold(); FontSize fontSize1 = new FontSize(){ Val = 11D }; Color color1 = new Color(){ Theme = (UInt32Value)1U }; RunFont runFont1 = new RunFont(){ Val = "Calibri" }; FontFamily fontFamily1 = new FontFamily(){ Val = 2 }; FontScheme fontScheme1 = new FontScheme(){ Val = FontSchemeValues.Minor }; runProperties1.Append(bold1); runProperties1.Append(fontSize1); runProperties1.Append(color1); runProperties1.Append(runFont1); runProperties1.Append(fontFamily1); runProperties1.Append(fontScheme1); Text text2 = new Text(); text2.Text = "bold text…"; run2.Append(runProperties1); run2.Append(text2); sharedStringItem1.Append(run1); sharedStringItem1.Append(run2); return sharedStringItem1; } 

要使用这个方法,你首先要findSharedStringTable一个实例,然后将新的ShareStringItem插入它:

  using (MemoryStream stream = new MemoryStream()) { // create in-memory copy of the Excel template file byte[] byteArray = File.ReadAllBytes(TEMPLATE_FILE_NAME); stream.Write(byteArray, 0, (int)byteArray.Length); using (SpreadsheetDocument document = SpreadsheetDocument.Open(stream, true)) { // Set private variable template component references (for reuse between methods) mExcelWorkbookPart = document.WorkbookPart; mSharedStringTablePart = mExcelWorkbookPart.SharedStringTablePart; mSharedStringTablePart.SharedStringTable.AppendChild(GenerateSharedStringItem()); } return stream.ToArray(); }