Открытие файла excel вызывает окно с сообщением "восстановление содержимого книги",
Пока я пытаюсь открыть файл excel, появляется окно с сообщением типа "Мы обнаружили проблему с некоторым содержимым в имени файла. Хочешь, чтобы мы попытались восстановить столько, сколько мы можем? источник этой книги, нажмите" Да ".". На самом деле, у меня есть шаблон excel, разработанный и копирующий файл в другой файл, и созданный файл temp. Я вставляю данные в файл temp с помощью OPEN XML, и данные поступают из базы данных.
Я пробовал решения, предоставляемые в сети, но эти исправления не разрешают мою проблему. Мое преимущество - 2010
![enter image description here]()
![enter image description here]()
Любое предоставляемое решение очень ценится.
Ответы
Ответ 1
У меня была эта проблема. Это было вызвано тем, как я хранил числа и строки в ячейках.
Числа могут быть сохранены просто с помощью 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
Ответ 2
Еще несколько случаев, которые могут вызвать такой тип ошибки:
- Ваше имя листа длиннее 31 символа
- У вас есть недопустимые символы в имени листа
- У вас есть ячейки со значениями длиннее 32k
Ответ 3
Другой возможной причиной может быть превышено максимальное количество стилей ячеек.
Вы можете определить:
- до 4000 стилей в рабочей книге .xls
- до 64000 стилей в рабочей книге .xlsx
В этом случае вы должны повторно использовать один и тот же стиль ячейки для нескольких ячеек, вместо того, чтобы создавать новый стиль ячейки для каждой ячейки.
Ответ 4
Я добавил правильный 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
Проблема связана с использованием
package.Save();
и
package.GetAsByteArray();
в то же время
когда мы звоним
package.GetAsByteArray();
он будет выполнять следующие операции
this.Workbook.Save(); this._package.Close(); this._package.Save(this._stream);
Следовательно, удаление
package.Save();
решит эту проблему "Мы обнаружили проблему с некоторым содержимым в имени файла. Хотите, чтобы мы попытались восстановить столько, сколько мы можем? Если вы доверяете источнику этой книги, нажмите" Да "."
Ответ 6
То же предупреждение, но проблема со мной заключалась в том, что я использовал входные данные клиента (имя волны) в качестве имени листа для файла, а когда в имени была представлена дата, символ "/", используемый в качестве разделителя части даты, вызывал проблему.
Я думаю, что Microsoft нужно предоставить лучший журнал ошибок, чтобы сэкономить время людей на расследование таких незначительных проблем. Надеюсь, мой ответ сэкономит кому-то еще время.
Ответ 7
Проблема была из-за сохранения строки в ячейке напрямую с помощью cell.CellValue = new CellValue ("Text"). Можно хранить числа, подобные этой, но не строку. Для строки определите тип данных как строку перед назначением текста с помощью Cell.DataType = CellValues.String;