1

私のコードは次のとおりです。

Parallel.ForEach(listSheets, (xlWorkSheet1) =>
{
  //  Excel.Worksheet xlWorkSheet1 = (Excel.Worksheet)excelbk.Worksheets["Sheet1"];
  xlRange = (Excel.Range)xlWorkSheet1.Cells[xlWorkSheet1.Rows.Count, 1];
  lock (xlRange)
  {
     //   nRows = (long)xlRange.get_End(Excel.XlDirection.xlUp).Row;
     nRows = xlWorkSheet1.UsedRange.Cells.Rows.Count;
     xlRange = (Excel.Range)xlWorkSheet1.Rows["5:" + nRows, Type.Missing];
     xlRange.Sort(xlRange.Columns[clnum1, Type.Missing], 
                  Excel.XlSortOrder.xlAscending,
                  xlRange.Columns[clnum2, Type.Missing], 
                  Type.Missing, 
                  Excel.XlSortOrder.xlAscending,
                  Type.Missing, 
                  Excel.XlSortOrder.xlAscending,
                  Excel.XlYesNoGuess.xlNo, 
                  Type.Missing, 
                  Type.Missing,
                  Excel.XlSortOrientation.xlSortColumns,
                  Excel.XlSortMethod.xlStroke,
                  Excel.XlSortDataOption.xlSortTextAsNumbers,
                  Excel.XlSortDataOption.xlSortNormal,
                  Excel.XlSortDataOption.xlSortNormal);

     Console.WriteLine("Sheet{0} have been sorted", xlWorkSheet1.Name);
  }
}

listSheets はリストとして定義されており、デバッグすると、問題のある COM 例外がまだ実行されているというエラーが表示されます。

System.Runtime.InteropServices.COMException アプリケーションがビジーです (RPC_E_CALL_REJECTED 0x80010001) 呼び出しが呼び出し先によって拒否されました (RPC_E_SERVERCALL_RETRYLATER 0x8001010A)

4

2 に答える 2

0

code4lifeが言うように:Excelはマルチスレッドの相互運用呼び出しをサポートしていません。また、ExcelのSortメソッドは、最新バージョンではすでにマルチスレッド化されているため、すでにマルチスレッド化されているものをマルチスレッド化しようとしても意味がありません。

于 2012-11-19T16:59:47.123 に答える
0

Excelは、マルチスレッドの相互運用機能の呼び出しをサポートしていません。内部的には、マルチスレッドです。たとえば、オプションページでマルチスレッドの再計算を有効にして、パフォーマンスを大幅に向上させることができます。ただし、マルチスレッドの相互運用を実行することはできません。恐れ入ります。

于 2012-11-19T15:57:01.457 に答える