当我正在尝试打开excel文件时,会出现一个消息框,提示“我们发现文件名中的某些内容存在问题。您是否希望我们尽可能多地恢复?如果您信任的话此工作簿的来源,单击是。“。实际做的是我有一个excel模板设计并将文件复制到另一个文件并创建临时文件我正在使用OPEN XML将数据插入临时文件,数据从数据库中获取。
我已尝试过网络中提供的解决方案,但这些修复程序并未解决我的问题。我的擅长是2010年
非常感谢提供的任何解决方案。
答案 0 :(得分:5)
我有这个问题。它是由我在单元格中存储数字和字符串的方式引起的。
可以使用cell.CellValue = new CellValue("5")
简单地存储数字,但是对于非数字文本,您需要在SharedStringTable元素中插入字符串并获取该字符串的索引。然后将单元格的数据类型更改为SharedString,并将单元格的值设置为SharedStringTable中字符串的索引。
// Here is the text I want to add.
string text = "Non-numeric text.";
// Find the SharedStringTable element and append my text to it.
var sharedStringTable = document.WorkbookPart.GetPartsOfType<SharedStringTablePart>().First().SharedStringTable;
var item = sharedStringTable.AppendChild(new SharedStringItem(new Text(text)));
// Set the data type of the cell to SharedString.
cell.DataType = new EnumValue<CellValues>(CellValues.SharedString);
// Set the value of the cell to the index of the SharedStringItem.
cell.CellValue = new CellValue(item.ElementsBefore().Count().ToString());
这在以下文档中进行了解释:http://msdn.microsoft.com/en-us/library/office/cc861607.aspx
答案 1 :(得分:1)
另外几种可能导致此类错误的案例:
答案 2 :(得分:1)
问题是由于使用
package.Save();
和
package.GetAsByteArray();
同时
当我们打电话
package.GetAsByteArray();
它将执行以下操作
this.Workbook.Save(); this._package.Close(); this._package.Save(this._stream);
因此,删除
package.Save();
将解决此问题“我们发现文件名中的某些内容存在问题。您是否要我们尝试尽可能多地恢复?如果您信任此工作簿的来源,请单击“是”。” < / strong>
答案 3 :(得分:0)
另一个可能的原因可能是超出最大单元格样式数。
您可以定义:
在这种情况下,您应该为多个单元格重复使用相同的单元格样式,而不是为每个单元格创建新的单元格样式。
答案 4 :(得分:0)
我添加了正确的cellReference并为我解决了这个问题:
string alpha = "ABCDEFGHIJKLMNOPQRSTUVQXYZ";
for (int colInx = 0; colInx < reader.FieldCount; colInx++)
{
AppendTextCell(alpha[colInx] + "1", reader.GetName(colInx), headerRow);
}
private static void AppendTextCell(string cellReference, string cellStringValue, Row excelRow)
{
// Add a new Excel Cell to our Row
Cell cell = new Cell() { CellReference = cellReference, DataType = new EnumValue<CellValues>(CellValues.String) };
CellValue cellValue = new CellValue();
cellValue.Text = cellStringValue.ToString();
cell.Append(cellValue);
excelRow.Append(cell);
}
答案 5 :(得分:0)
相同的警告,但是我的问题是我使用客户端输入(波形名称)作为文件的工作表名称,并且当名称中显示日期时,引起字符“ /”用作日期部分分隔符的原因问题。
我认为Microsoft需要提供更好的错误日志,以节省人们调查此类次要问题的时间。希望我的回答可以节省别人的时间。
答案 6 :(得分:0)
问题是由于直接使用cell.CellValue = new CellValue(“ Text”)在单元格中存储字符串。可以存储这样的数字,但不能存储字符串。对于字符串,在使用Cell.DataType = CellValues.String;
分配文本之前,将数据类型定义为字符串。