打开excel文件会提示一个消息框;“工作簿的内容恢复”;

打开excel文件会提示一个消息框;“工作簿的内容恢复”;,excel,openxml,Excel,Openxml,当我试图打开excel文件时,一个消息框提示:“我们发现文件名中的某些内容有问题。是否希望我们尽可能多地恢复?如果您信任此工作簿的来源,请单击“是”。”。实际上,我设计了一个excel模板,将文件复制到另一个文件,并创建了临时文件。我正在使用OPEN XML将数据插入临时文件,数据来自数据库 我已经尝试了网络上提供的解决方案,但这些解决方案并不能解决我的问题。我的excel是2010 非常感谢提供的任何解决方案。我遇到了这个问题。这是由我在单元格中存储数字和字符串的方式造成的 只需使用cel

当我试图打开excel文件时,一个消息框提示:“我们发现文件名中的某些内容有问题。是否希望我们尽可能多地恢复?如果您信任此工作簿的来源,请单击“是”。”。实际上,我设计了一个excel模板,将文件复制到另一个文件,并创建了临时文件。我正在使用OPEN XML将数据插入临时文件,数据来自数据库

我已经尝试了网络上提供的解决方案,但这些解决方案并不能解决我的问题。我的excel是2010


非常感谢提供的任何解决方案。

我遇到了这个问题。这是由我在单元格中存储数字和字符串的方式造成的

只需使用
cell.CellValue=new CellValue(“5”)
即可存储数字,但对于非数字文本,需要在SharedStringTable元素中插入字符串并获取该字符串的索引。然后将单元格的数据类型更改为SharedString,并将单元格的值设置为SharedString表中字符串的索引

// 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());
//这是我要添加的文本。
string text=“非数字文本。”;
//查找SharedStringTable元素并将我的文本附加到它。
var sharedStringTable=document.WorkbookPart.GetPartsOfType().First().sharedStringTable;
var item=sharedStringTable.AppendChild(新SharedStringItem(新文本));
//将单元格的数据类型设置为SharedString。
cell.DataType=新的枚举值(CellValues.SharedString);
//将单元格的值设置为SharedStringItem的索引。
cell.CellValue=新的CellValue(item.ElementsBefore().Count().ToString());

此处的文档对此进行了解释:

可能导致此类错误的其他几种情况:

  • 您的工作表名称超过31个字符
  • 工作表名称中有无效字符
  • 您的单元格的值超过32k

另一个可能的原因可能是超过了单元格样式的最大数量

您可以定义:

  • 一个.xls工作簿中最多可包含4000种样式
  • .xlsx工作簿中最多可包含64000种样式

在这种情况下,您应该对多个单元格重复使用相同的单元格样式,而不是为每个单元格创建新的单元格样式。

我添加了正确的单元格引用,并为我解决了此问题:

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);
}
string alpha=“ABCDEFGHIJKLMNOPQRSTUVQXYZ”;
for(int colInx=0;colInx
问题是由于使用

package.Save()

package.GetAsByteArray()

同时

当我们打电话时

package.GetAsByteArray()

它将执行以下操作

this.Workbook.Save(); 此._package.Close(); this.\u package.Save(this.\u流)

因此,删除

package.Save()


将解决此问题“我们发现文件名中的某些内容存在问题。是否希望我们尽可能多地恢复?如果您信任此工作簿的来源,请单击“是”。

相同的警告,但我的问题是我使用了客户端输入(wave的名称)作为文件的图纸名称,当名称中显示日期时,用作日期部分分隔符的字符“/”导致了问题


我认为微软需要提供更好的错误日志,以节省人们调查此类小问题的时间。希望我的回答能节省其他人的时间。

问题是因为直接使用cell.CellValue=new CellValue(“文本”)在单元格中存储字符串。可以像这样存储数字,但不能存储字符串。对于字符串,在使用Cell.DataType=CellValues.string分配文本之前,将数据类型定义为字符串

这不是一个编码问题,从这一点上是不可能解决的。你能告诉我为什么不可能解决吗?@dineshHaraveer你能解决这个问题吗?因为我也面临着同样的问题issue@Pratik我无法解决这个问题。我正在等待任何人提供解决方案。我在谷歌上搜索了一下,但什么也没找到。@DineshHaraver使用openxml SDK构建excel文件的正确方法解决了这个问题。我遵循了这个链接,我刚刚接近了DXML,没有任何问题。而且它也容易得多。