使用OpenXml将日语字符串写入excel

时间:2018-04-10 10:08:13

标签: c# excel openxml

我正在尝试通过从数据库中读取数据来创建Excel文件。其中一列包含日文文本。将该列写入excel单元格并保存工作簿会产生以下错误(这是有意义的,因为字符不是有效的xml字符):'',十六进制值0x0B,是无效字符。

我正在使用DocumentFormat.OpenXml包将字符串写入excel单元格。

var excelCell = new Cell();
var cellValue = dtRow[col.Name].ToString(); 
var inlineStr = new InlineString(new Text(cellValue));
excelCell.DataType = CellValues.InlineString;
excelCell.InlineString = inlineStr;

在C#

中使用OpenXml将日文字符写入excel需要做些什么

1 个答案:

答案 0 :(得分:1)

确定。找到了正确的方法。把它作为答案,以便它可以有所帮助。 要向excel添加不允许作为有效xml的文本,请将文本SharedString添加到SharedStringTable

var index = InsertSharedStringItem(text, shareStringPart);
excelCell.CellValue = new CellValue(index.ToString());
excelCell.DataType = new EnumValue<CellValues>(CellValues.SharedString);



        private static int InsertSharedStringItem(string text, SharedStringTablePart shareStringPart)
        {
            // If the part does not contain a SharedStringTable, create one.
            if (shareStringPart.SharedStringTable == null)
            {
                shareStringPart.SharedStringTable = new SharedStringTable();
            }

            int i = 0;

            // Iterate through all the items in the SharedStringTable. If the text already exists, return its index.
            foreach (SharedStringItem item in shareStringPart.SharedStringTable.Elements<SharedStringItem>())
            {
                if (item.InnerText == text)
                {
                    return i;
                }

                i++;
            }

            // The text does not exist in the part. Create the SharedStringItem and return its index.
            shareStringPart.SharedStringTable.AppendChild(new SharedStringItem(new DocumentFormat.OpenXml.Spreadsheet.Text(text)));
            shareStringPart.SharedStringTable.Save();

            return i;
        }

使用OpenXml将文本作为共享字符串添加到Excel的完整文档 https://msdn.microsoft.com/en-us/library/office/cc861607.aspx