【问题标题】:Open XML SDK: Format part of an Excel-cellOpen XML SDK:格式化 Excel 单元格的一部分
【发布时间】:2011-08-30 11:03:27
【问题描述】:

将 Open XML for Excel 与 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);

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

【问题讨论】:

    标签: c# excel openxml openxml-sdk


    【解决方案1】:

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

    这里是一些示例代码,说明如何使短语的第二部分“普通文本...粗体文本...”加粗:

           // 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();
                }
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多