如何使用Open XML SDK向电子表格添加含内联字符串值的单元格
使用Open XML SDK向Excel单元格添加文本:内联字符串方案
官方文档里推荐用共享字符串表给Excel单元格添加非数字文本,这种方案在常规场景下确实有性能和存储效率优势,但实际编程创建表格时,这套流程太繁琐:你得先创建共享字符串表,还要手动添加、维护条目,甚至得检查字符串是否已经在表里——这些额外工作反而抵消了它的优势。
其实还有更简单的方法:用**内联字符串(InlineString)**标记,官方文档提过但没给示例,网上也难搜到具体代码。下面直接给C#的实现示例:
完整代码示例
using DocumentFormat.OpenXml; using DocumentFormat.OpenXml.Packaging; using DocumentFormat.OpenXml.Spreadsheet; // 创建新的Excel文档 using (SpreadsheetDocument spreadsheetDocument = SpreadsheetDocument.Create("InlineStringExample.xlsx", SpreadsheetDocumentType.Workbook)) { // 添加工作簿部件 WorkbookPart workbookPart = spreadsheetDocument.AddWorkbookPart(); workbookPart.Workbook = new Workbook(); // 添加工作表部件 WorksheetPart worksheetPart = workbookPart.AddNewPart<WorksheetPart>(); worksheetPart.Worksheet = new Worksheet(new SheetData()); // 添加工作表到工作簿 Sheets sheets = spreadsheetDocument.WorkbookPart.Workbook.AppendChild(new Sheets()); Sheet sheet = new Sheet() { Id = spreadsheetDocument.WorkbookPart.GetIdOfPart(worksheetPart), SheetId = 1, Name = "Sheet1" }; sheets.Append(sheet); // 获取SheetData SheetData sheetData = worksheetPart.Worksheet.GetFirstChild<SheetData>(); // 创建行 Row row = new Row(); sheetData.Append(row); // 创建使用内联字符串的单元格 Cell cell = new Cell() { CellReference = "A1", // 指定单元格值类型为内联字符串 CellValue = new CellValue(), DataType = CellValues.InlineString }; // 添加内联字符串内容 InlineString inlineString = new InlineString(); Text text = new Text("这是直接用内联字符串添加的文本"); inlineString.Append(text); cell.Append(inlineString); // 将单元格添加到行 row.Append(cell); // 保存工作簿 workbookPart.Workbook.Save(); }
关键说明
- 不需要创建或操作共享字符串表,直接在Cell节点下嵌套
InlineString和Text元素即可 - 必须把Cell的
DataType设为CellValues.InlineString,否则Excel会无法正确识别内容 - 这种方案适合快速生成简单表格,或者不需要大量重复文本的场景,省去了维护共享字符串表的麻烦
内容的提问来源于stack exchange,提问作者Dan Stevens
相关产品推荐
相关产品推荐

