Проверка орфографии в Excel с использованием C#

Кто -то просто поможет мне с этим! почему этот код не работает. Я не нахожу много учебников и в интернете.

Excel.Application xlApp;
Excel.Workbook xlWorkBook;
Excel.Worksheet xlWorkSheet;
object misValue = System.Reflection.Missing.Value;
xlApp = new Excel.ApplicationClass();
xlWorkBook = xlApp.Workbooks.Add(misValue);
xlWorkShee=(Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);                 
xlApp.SpellingOptions.UserDict = "CUSTOM.DIC";     
var udict = xlApp.SpellingOptions.UserDict;
xlWorkSheet.CheckSpelling();        
xlWorkSheet.Cells[1, 1] = "Sstring";           
string tsql = "select nvalue from [role report]";
OleDbDataAdapter tda = new OleDbDataAdapter(tsql, con);
DataTable tdt = new DataTable();
con.Open();
tda.Fill(tdt);
con.Close();
int count = 0;

for (int x = 0; x<500; x++)
{
    if (tdt.Rows[x]["nvalue"].ToString()!= "")
    {
        xlWorkSheet.Cells[x+2, 1] = tdt.Rows[x]["nvalue"].ToString();
        count++;
    }
}

for (int k=0; k<count; y++)
{
     //bool t = false;
    if (xlWorkSheet.Cells[k+2, 1].ToString() != "")
    {
        if ((xlApp.CheckSpelling(xlWorkSheet.Cells[k+2, 1].ToString())))
            xlWorkSheet.Cells[k+2, 2] = "chk";
    }
}

try
{
    xlWorkBook.SaveAs("spellspell.xls",Excel.XlFileFormat.xlWorkbookNormal,
    misValue,Excel.XlSaveAsAccessMode.xlExclusive,misValue,                      
    misValue, misValue,misValue,misValue);
}
catch (Exception ex)
{ }
xlWorkBook.Close(true, misValue, misValue);
xlApp.Quit();

releaseObject(xlWorkSheet);
releaseObject(xlWorkBook);
releaseObject(xlApp);

MessageBox.Show("Excel file created, you can find the file c:\\csharp-Excel.xls")           

Предполагается, что мой вывод содержит строку "chk" в ячейке, кроме каждого неправильно написанного слова. Но вывод не показывает это.

2 ответа

Этот код наконец заработал для меня!!! Извлекли данные из Access Db и сохранили их в виде столбца в Excel и использовали код для выявления неверно написанных слов в таблице Excel.

  for (int y = 0; y <count; y++)
    {
    try
       {
   if(xlWorkSheet.Range["A" + (y + 2) + ""].Value.ToString() != "")
      {
     if (!(xlApp.CheckSpelling(xlWorkSheet.Range["A" + (y + 2) + ""].Value.ToString(), 
             udict, 1033)))
           {
              xlApp.Visible = false;

              xlWorkSheet.Cells[y + 2, 2] = "chk";            
                 }
              }
          }
     catch(Exception)
      {
       }
      }

Выбор камеры был частью, которая заставила меня заняться. в заключение

 if (!(xlApp.CheckSpelling(xlWorkSheet.Range["A" + (y + 2) + ""].Value.ToString(), 
         udict, 1033)))

работал. Это показывало "chk" против каждого неправильно написанного слова.

Я думаю, что вы можете проверить API на MSDN, вот ссылки =>
Worksheet.CheckSpelling:
http://msdn.microsoft.com/en-us/library/microsoft.office.tools.excel.worksheet.checkspelling(v=vs.100).aspx

Application.CheckSpelling:
http://msdn.microsoft.com/en-us/library/microsoft.office.interop.excel._application.checkspelling

Согласно определению, метод CheckSpelling делает это: "Проверяет написание одного слова. Возвращает True, если слово найдено в одном из словарей; возвращает False, если слово не найдено".

Это означает, что если какое-либо слово написано с ошибкой, CheckSpelling должен вернуть False (зависит от того, находится слово в данном словаре или нет)

В вашем коде вы делали

if ((xlApp.CheckSpelling(xlWorkSheet.Cells[k+2, 1].ToString())))
    xlWorkSheet.Cells[k+2, 2] = "chk";

я думаю, что это противоположно тому, чего вы пытались достичь. ("have the string "chk" in the cell besides every wrongly spelled word")

Так что просто добавьте! на ваше заявление if

if (!(xlApp.CheckSpelling(xlWorkSheet.Cells[k+2, 1].ToString())))
    xlWorkSheet.Cells[k+2, 2] = "chk";

и это должно быть то, что вы были после.

Кроме того, для ясности и читабельности кода я настоятельно рекомендую разбить код на функции, методы и т. Д. И будьте осторожны при вызове xlWorkSheet.Cells[k+2, 1].ToString(), поскольку это может дать вам исключение Null без предварительной проверки значения.

Другие вопросы по тегам