使用C#进行Excel拼写检查

时间:2012-08-25 07:27:27

标签: c# excel spell-checking

有人帮我这个! 为什么这段代码不起作用。我也没有在互联网上找到太多的教程。

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 个答案:

答案 0 :(得分:1)

这段代码终于为我工作了!!!从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”。

答案 1 :(得分:0)

我想您可能想查看MSDN上的API,这里是links =&gt;
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异常而不检查价值第一。