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

本文关键字:单元格 一部分 excel 格式化 XML SDK 打开 | 更新日期: 2023-09-27 18:06:56

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

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);

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

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

要仅将部分文本设置为粗体,您将需要通过将文本插入SharedStringTable并使单元格的数据类型为SharedString而不是InlineString来控制。这将使CellValue成为该表的引用,如0、1、2等,并允许更多的控制,而不是做内联字符串。

下面是一些关于如何使短语"Normal text…"的第二部分的示例代码。粗体文本…" Bold:
       // 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;
        }

要使用此方法,您需要首先找到SharedStringTable的实例,然后将新的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();
            }