2011-07-16 23 views
3

私のアプリケーションでは、CSVファイルをインポートできますが、Excelシートにデータがあるので、CSV形式に変換する必要があります。 私はそれのzipファイルをダウンロードした際に、CSVへのExcelデータをエクスポートするためのネットからのコードを持って、その作業が、私はVS 2008にこのプログラムをコピーするときには動作していないとExcelシートデータをCSV形式にエクスポート

にコードを、それを実行するには

using System; 
using System.IO; 
using System.Data; 
using System.Data.OleDb; 
using System.Collections.Generic; 
using System.Text; 

namespace XlsToCsv 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      string sourceFile, worksheetName, targetFile; 
      sourceFile = @"D:\emp.xls";worksheetName = "sheet1"; targetFile = @"D:\empcsv.csv"; 
      convertExcelToCSV(sourceFile, worksheetName, targetFile); 
     } 

     static void convertExcelToCSV(string sourceFile, string worksheetName, string targetFile) 
     { 
      string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + sourceFile + ";Extended Properties=\" Excel.0;HDR=Yes;IMEX=1\""; 
      OleDbConnection conn = null; 
      StreamWriter wrtr = null; 
      OleDbCommand cmd = null; 
      OleDbDataAdapter da = null; 
      try 
      { 
       conn = new OleDbConnection(strConn); 
       conn.Open(); 

       cmd = new OleDbCommand("SELECT * FROM [" + worksheetName + "$]", conn); 
       cmd.CommandType = CommandType.Text; 
       wrtr = new StreamWriter(targetFile); 

       da = new OleDbDataAdapter(cmd); 
       DataTable dt = new DataTable(); 
       da.Fill(dt); 

       for (int x = 0; x < dt.Rows.Count; x++) 
       { 
        string rowString = ""; 
        for (int y = 0; y < dt.Columns.Count; y++) 
        { 
         rowString += "\"" + dt.Rows[x][y].ToString() + "\","; 
        } 
        wrtr.WriteLine(rowString); 
       } 
       Console.WriteLine(); 
       Console.WriteLine("Done! Your " + sourceFile + " has been converted into " + targetFile + "."); 
       Console.WriteLine(); 
      } 
      catch (Exception exc) 
      { 
       Console.WriteLine(exc.ToString()); 
       Console.ReadLine(); 
      } 
      finally 
      { 
       if (conn.State == ConnectionState.Open) 
        conn.Close(); 
       conn.Dispose(); 
       cmd.Dispose(); 
       da.Dispose(); 
       wrtr.Close(); 
       wrtr.Dispose(); 
      } 
     } 
    } 
} 
であることを実行しますこの

System.Data.OleDb.OleDbException: Could not find installable ISAM. 

    at System.Data.OleDb.OleDbConnectionInternal..ctor(OleDbConnectionString cons 
tr, OleDbConnection connection) 

    at System.Data.OleDb.OleDbConnectionFactory.CreateConnection(DbConnectionOpti 
ons options, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection o 
wningObject) 

    at System.Data.ProviderBase.DbConnectionFactory.CreateNonPooledConnection(DbC 
onnection owningConnection, DbConnectionPoolGroup poolGroup) 

    at System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection ow 
ningConnection) 

    at System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection ou 
terConnection, DbConnectionFactory connectionFactory) 

    at System.Data.OleDb.OleDbConnection.Open() 

    at Excel_To_csv.Program.convertExcelToCSV(String sourceFile, String worksheet 
Name, String targetFile) in D:\Excel to csv\Excel To csv\Excel To csv\Program.cs 
:line 41 

よう

その投げエラーがなぜこのエラーは、私は、このスレッドを読んで

答えて

1

Excelのドライバの問題が原因でエラーが発生する可能性がありますが、必要なdllがコンピュータのフォームに存在しないためにこのエラーが発生することは100%確信していません。

この問題は、MDACをコンピュータにインストールして実行することで解決できる場合があります。

あなたがあなたの質問の答えとして私に書かれている以下の貼り付けられたコードを使用することができますが、まず変換ファイルにかなりの数がある場合、あなたは

using Excel = Microsoft.Office.Interop.Excel; 
using Office = Microsoft.Office.Core; 

機能

private void EXCELTOCSV() 
    { 
     OpenFileDialog excelSheetToOpen = new OpenFileDialog(); 
     excelSheetToOpen.Filter = "Excel 97- 2003 WorkBook (*.xls)| *.xls | Excel 2007 WorkBook (*.xlsx) | *.xlsx | All files (*.*)|*.*"; 
     excelSheetToOpen.FilterIndex = 3; 
     excelSheetToOpen.Multiselect = false; 



     if (excelSheetToOpen.ShowDialog() == DialogResult.OK) 
     { 

      Excel.Application excelApp = new Excel.Application(); 
      String workbookPath = excelSheetToOpen.FileName; 
      Excel.Workbook excelWorkbook = excelApp.Workbooks.Open(workbookPath); 
      Excel.Sheets excelWorkBookSheets = excelWorkbook.Sheets; 

      Excel.Range _UsedRangeOftheWorkSheet; 


      foreach (Excel.Worksheet _Sheet in excelWorkBookSheets) 
      { 
       if (_Sheet.Name =="ExcelSheetName") 
       { 

        _UsedRangeOftheWorkSheet = _Sheet.UsedRange; 

        Object[,] s = _UsedRangeOftheWorkSheet.Value; 

        System.IO.StreamWriter sw = new System.IO.StreamWriter("FileName.csv", true); 

        for (int b = 0; b < s.Length; b++) 
        { 
         StringBuilder sb = new StringBuilder(); 
         for (int c = 0; c < s.Rank; c++) 
         { 
          if (sb == null) 
          { 
           sb.Append((String)s[b, c]); 
          } 
          else 
          { 
           sb.Append("," + (String)s[b, c]); 
          } 
         } 
         sw.WriteLine(sb.ToString()); 
        } 
        sw.Close(); 

       } 
      } 

     } 
    } 

ホー参照の下に追加する必要があり、以下のコードの一部を使用するには、レコードの元65000

のこれはあなたのために働くでしょう

ありがとう。

-1

接続文字列の拡張プロパティに問題があるようです。 Xバージョンnumber.Like 8.0

+0

@ Shekar-iは変更されましたが、同じエラーが発生しました。 – Sweety

0

ここでここであなたがExcel.0を書かれている

はそれがExcel X.0すべきではないエラーのこれらの種類にいくつかの深さになり、別のstackoverflowのスレッドがあります。 Writing into excel file with OLEDB

これらの古い接続ライブラリを使用するコードでは、この種の問題が発生する傾向があります。

関連する問題