web-dev-qa-db-ja.com

Excelファイルを開くと、「ブックのコンテンツの回復」というメッセージボックスが表示されます。

Excelファイルを開こうとすると、次のようなメッセージボックスが表示されます「ファイル名の一部のコンテンツに問題が見つかりました。できる限り回復を試みますか?ソースを信頼している場合このワークブックの[はい]をクリックします。 "。実際に行われているのは、Excelテンプレートを設計し、ファイルを別のファイルにコピーして一時ファイルを作成したことです。OPENXMLを使用して一時ファイルにデータを挿入し、データをデータベースから取得しています。

私はネットで提供されている解決策を試しましたが、それらの修正は私の問題を解決していません。私のExcelは2010年です

enter image description here

enter image description here

提供されたソリューションは誰でも大歓迎です。

12
Dinesh Haraveer

私はこの問題を抱えていました。これは、数値と文字列をセルに格納する方法が原因でした。

数値は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

5
Boric

このタイプのエラーを引き起こす可能性のある別のいくつかのケース:

  • シート名が31文字を超えています
  • シート名に無効な文字が含まれています
  • 32kより長い値のセルがあります
2
Rory

問題は使用によるものです

package.Save();

そして

package.GetAsByteArray();

同時に

電話するとき

package.GetAsByteArray();

以下の操作を行います

this.Workbook.Save(); this._package.Close(); this._package.Save(this._stream);

したがって、削除

package.Save();

この問題を解決します「ファイル名の一部のコンテンツに問題が見つかりました。できる限り回復を試みますか?このワークブックのソースを信頼できる場合は、[はい]をクリックしてください。 "

1
Hari

別の考えられる原因はセルスタイルの最大数を超えているである可能性があります。

以下を定義できます。

  • .xlsワークブックで最大4000のスタイル
  • .xlsxブックで最大64000スタイル

この場合、すべてのセルに新しいセルスタイルを作成するのではなく、複数のセルに同じセルスタイルを再利用する必要があります。

0
lu_ko

適切な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);
}
0
Yuri

この問題は、cell.CellValue = new CellValue( "Text")を使用して文字列をセルに直接格納することが原因でした。このような数値を格納することは可能ですが、文字列を格納することはできません。文字列の場合、Cell.DataType = CellValues.String;を使用してテキストを割り当てる前に、データ型を文字列として定義します。

0

同じ警告ですが、ファイルのシート名としてクライアント入力(ウェーブの名前)を使用していて、名前内に日付が表示されている場合、日付部分の区切り文字として使用されている文字「/」が問題の原因でした。

マイクロソフトは、このような小さな問題を調査する時間を節約するために、より良いエラーログを提供する必要があると思います。私の答えが他の誰かの時間を節約することを願っています。

0
Petko Petkov