1

誰かがこれを手伝ってくれます!このコードが機能しないのはなぜですか。インターネットでもチュートリアルはあまり見つかりません。

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」が含まれているはずです。しかし、出力はそれを示していません。

4

2 に答える 2

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」が表示されました。

于 2012-08-27T11:54:53.217 に答える
0

MSDN で API を確認することをお勧めします。ここにリンクがあります =>
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 メソッドは、「1 つの単語のスペルをチェックします。単語が辞書の 1 つに見つかった場合は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 例外が発生する可能性があるため、 の呼び出しには注意してください。

于 2012-08-26T04:26:21.710 に答える