2012-01-31 19 views
0

データセットをxlsxにエクスポートするために、次のコードを使用していました。 すべてがうまく動作します.net 4.0になっていますが、残念ながら3.5のフレームワークが必要なサーバーがあり、何もできません。だからフレームワークを4.0から3.5に変更し、コードを実行するとエラーが発生するMicrosoft.Office.Interop.Excelを使用してxlsxにデータセットをエクスポートする

古い形式または無効なタイプライブラリ。 (HRESULTからの例外: 0x80028018(TYPE_E_INVDATAREAD))ベローズラインが

Excel.Workbookブック= excel.Workbooks.Addを実行する際にエラーが発生

()。

が、これは私のコード

static void Main(string[] args) 
     { 

      String filepath = "C:/test.csv";    
      DataSet ds = Convert(filepath.ToString(), "tblCustomers", "\t");    
      Excel.Application excel = new Excel.Application();   
      Excel.Workbook workBook = excel.Workbooks.Add(); 
      Excel.Worksheet sheet = (Excel.Worksheet)workBook.ActiveSheet; 
      int i = 0;    
       for (int j = 0; j < ds.Tables[0].Columns.Count; j++) 
       { 
        sheet.Cells[i + 1, j + 1] = ds.Tables[0].Columns[j].ToString();    
       } 

       i = 1;     
      foreach (DataRow row in ds.Tables[0].Rows) 
      {        
       for (int j = 0; j < row.ItemArray.Length; j++) 
       { 
        sheet.Cells[i + 1, j + 1] = row[j].ToString().Trim(); 
        //cleangth = row[j].ToString().Trim().Length *10; 

       } 

       i++; 
      } 


      workBook.SaveAs(@System.IO.Directory.GetCurrentDirectory() + "\\test.xlsx"); 
      workBook.Close();   

     } 

任意の提案はありますか?

答えて

1

これは明らかに.NET 4.0(source)で修正されたバグです.Excelの地域設定がPCの地域設定と異なる場合、このエラーが発生します。マイクロソフトから

あなたは以下の条件に該当する場合にExcelのメソッドを呼び出すと、このエラーが表示されます。

-The方法は、LCID(ロケール識別子)が必要です。

- 英語版のExcelを実行します。ただし、コンピュータの地域設定は、英語以外の言語用に構成されています。

クライアントコンピュータが英語版のExcelを実行しており、現在のユーザーのロケールが英語以外の言語用に構成されている場合、Excelは構成された言語の言語パックを特定しようとします。言語パックが見つからない場合は、エラーが報告されます。 Officeのバージョンのための多言語ユーザーインターフェイスパック-install

では、次のいずれかの方法を使用することができ、この問題を回避するには。

- InvokeMemberを使用してExcelのメソッドまたはプロパティを実行し、呼び出しのCultureInfoを指定できるようにします。たとえば、次のコードは、CultureInfoとして "en-US"を含むWorkbooksオブジェクトAddメソッドを呼び出す方法を示しています。

またはExcelメソッドを呼び出す前にCultureInfoを設定します。

提案回避策のコード例については、このリンクを参照してください。http://support.microsoft.com/kb/320369

+0

oufは、よく、それはそこから通過し、それは sheet.Cells [I + 1、J + 1] =のDSで破壊した後に.Tables [0] .Columns [j] .ToString(); HRESULTからの例外:0x800A03ECを示します。 – themis

+0

私はsheet.Cells [i + 1、j + 1] = "ddd"を設定しても、それはまだ壊れます。また、シート変数は、このようにキャストする必要がありました。 Excel.Worksheet sheet =(Excel.Worksheet)workBook.ActiveSheet; – themis

+0

多分これはそれと関係があります:http://stackoverflow.com/a/493253/1108263? –

関連する問題