我正在尝试通过从数据库中读取数据来创建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需要做些什么答案 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