У меня есть инструмент, с помощью которого мы берем файл Excel, проверяем орфографию в каждой строке определенного столбца и сохраняем этот файл Excel по другому пути. Но после записи в те ячейки, где выполняется проверка орфографии, и последующего сохранения, выдается исключение. Это мой код:
objExcel = new Excel.Application();
objWorkbook = objExcel.Workbooks.Open(path);
col_num = columnNumber(columnName);
int sheetId = 0;
Excel.Worksheet objSheet = objWorkbook.Worksheets[1];
int rows = objSheet.UsedRange.Rows.Count;
int rowCount = 2;
FileInfo fi = new FileInfo(path);
List<string> tempTxtlist = new List<string>();
InputFileInfo tempInputFileInfo = new InputFileInfo();
tempInputFileInfo.Id = (sheetId + 1).ToString();
tempInputFileInfo.DocxFile = fi.Name;
tempInputFileInfo.TextFile = Path.GetFileNameWithoutExtension(path) + ".txt";
tempInputFileInfo.SubDir = fi.Directory.Name;
for (int r = rowCount; r <= rows; r++)
{
tempTxtlist.Add(objSheet.Cells[r, col_num].Text);
Excel.Range rng = (Excel.Range)objSheet.Cells[r, col_num];
rng.ClearFormats();
rng.WrapText = true;
rng.Font.Bold = false;
rng.Font.Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.Black);
string cellTxt = objSheet.Cells[r, col_num].Text;
cellTxt = cellTxt.Replace('\u00A0', ' ');
string[] arrayOfWords = cellTxt.Split(' ');
foreach (string word in arrayOfWords)
{
bool isCorrectSent = objExcel.CheckSpelling(word.ToString());
if (!isCorrectSent)
{
int startIndex = cellTxt.IndexOf(word);
int length = word.Length + 1;
if (word.Contains("?") || word.Contains(",") || word.Contains("!"))
continue;
rng.Characters[startIndex, length].Font.Bold = true;
rng.Characters[startIndex, length].Font.Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.Red);
}
}
}
tempInputFileInfo.inputTxt = tempTxtlist;
tempInputFileInfoList.Add(tempInputFileInfo);
objWorkbook.Save();
objWorkbook.Close();
objExcel.Quit();
}
catch
{
objWorkbook.Saved = true;
objWorkbook.Close();
objExcel.Quit();
}
finally
{
Marshal.ReleaseComObject(objWorkbook);
Marshal.ReleaseComObject(objExcel);
GC.Collect();
GC.WaitForPendingFinalizers();
}
columnNumberParam = col_num;
return tempInputFileInfoList;
}
Исключение вызывается в objWorkbook.Save () после записи в excel.
Я попытался отладить его. Сначала я удалил "rng.ClearFormats (); " и попытался запустить код, он работал для 2 файлов Excel, но для остальных он выдал такое же исключение.
Затем я сделал Excel видимым, чтобы увидеть, что происходит внутри, в некоторых случаях он записывает в нежелательном формате Например - Что это должно быть - Желаемое Что я получаю - Нежелательное
Примечание: этот нежелательный результат случается только с несколькими ячейками, другие записываются правильно.
Теперь я не понимаю, в чем причина этого исключения? Это потому, что Excel не пишется должным образом? , играет ли в этом роль форматирование Excel? или в коде ошибка? Или что-то еще?
Может ли обработка диапазона быть проблемой в коде?
Любая помощь будет принята с благодарностью. Если у вас есть сомнения по поводу вопроса, дайте мне знать.