2017-03-21 30 views
0

XLSXファイルを別のCSVファイルに変換する必要があります。 私はこのプロセスを行う方法について多くの研究をしましたが、私に合ったものは何も見つかりませんでした。 このGithubGistのみが見つかりましたConvert an Epplus ExcelPackage to a CSV fileCSVファイルを使用したXLSXファイルの変換

バイナリのArreyを返します。しかし、明らかにそれはもう動作しません。

私はLoadFromCollection

FileInfo novoArquivoCSV = new FileInfo(fbd.SelectedPath); 
    var fileInfoCSV = new FileInfo(novoArquivo + "\\" + 
           nameFile.ToString() + ".csv"); 


      using (var csv = new ExcelPackage(fileInfoCSV)) 
     { 
      csv.Workbook.Worksheets.Add(nameFile.ToString()); 
      var worksheetCSV = csv.Workbook.Worksheets[1]; 

      worksheetCSV.Cells.LoadFromCollection(xlsx.ConvertToCsv()); 

     } 
+0

ステップ1:変数の名前を変更します。あなたと私はそれだけで混乱します。 'xls'が実際に' filename'であれば、それに名前を付けます。 'xls'がファイル名であれば、' nameFile'は何ですか? BTW: 'csv'はCSVファイルではなく、EPPlus Excelパッケージです。これには変数名も間違っています。 –

+0

'xls'が何であれ、' worksheetCSV.Cells.LoadFromCollection'はXLSXファイルを作成します。 **なぜあなたは 'xlsx'をCSVに変換したいのですか? XLSXは、問題なくすべてのプログラムや言語で使用できるXMLファイルの単なるパッケージです。それを読んだり作成したりするのに、Excelは必要ありません。 CSVには日付、番号、セパレータの形式に関する問題があります。 –

+0

はいわかっています。しかし、残念ながら私は.csvファイルでしかできないので、プロジェクトが作成されたので、SQL DTO 2000にインポートするには.csvファイルが必要です。 :/ –

答えて

3

あなたがXLSXシートを読み込み、メモリストリームを介しバイトバッファとしてCSVデータを返すにリンクされたコードを使用してArreyをロードしようとしています。

あなたはメモリストリームを削除し、ConvertToCsvでターゲットファイルへのパスを渡す場合は、代わりにファイルに直接書き込むことができます。

public static void ConvertToCsv(this ExcelPackage package, string targetFile) 
{ 
     var worksheet = package.Workbook.Worksheets[1]; 

     var maxColumnNumber = worksheet.Dimension.End.Column; 
     var currentRow = new List<string>(maxColumnNumber); 
     var totalRowCount = worksheet.Dimension.End.Row; 
     var currentRowNum = 1; 

     //No need for a memory buffer, writing directly to a file 
     //var memory = new MemoryStream(); 

     using (var writer = new StreamWriter(targetFile,false, Encoding.UTF8)) 
     { 
     //the rest of the code remains the same 
     } 

     // No buffer returned 
     //return memory.ToArray(); 
} 

Encoding.UTF8は、ファイルがバイト順でUTF8のように書くことが保証されますすべてのプログラムがASCIIではなくUTF8ファイルであることを理解できるようにするマーク。それ以外の場合、プログラムはファイルをASCIIとして読み取って、最初に見つかった非ASCII文字でチョークすることができます。

+0

これは私のために働きます。どうもありがとうございました。 –

0

Excelオブジェクトの.SaveAs()メソッドをチェックアウトします。

wbWorkbook.SaveAs("c:\yourdesiredFilename.csv", Microsoft.Office.Interop.Excel.XlFileFormat.xlCSV) 

または以下:

public static void SaveAs() 
{ 
    Microsoft.Office.Interop.Excel.Application app = new Microsoft.Office.Interop.Excel.ApplicationClass(); 
    Microsoft.Office.Interop.Excel.Workbook wbWorkbook = app.Workbooks.Add(Type.Missing); 
    Microsoft.Office.Interop.Excel.Sheets wsSheet = wbWorkbook.Worksheets; 
    Microsoft.Office.Interop.Excel.Worksheet CurSheet = (Microsoft.Office.Interop.Excel.Worksheet)wsSheet[1]; 

    Microsoft.Office.Interop.Excel.Range thisCell = (Microsoft.Office.Interop.Excel.Range)CurSheet.Cells[1, 1]; 

    thisCell.Value2 = "This is a test."; 

    wbWorkbook.SaveAs(@"c:\one.xls", Microsoft.Office.Interop.Excel.XlFileFormat.xlWorkbookNormal, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlShared, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing); 
    wbWorkbook.SaveAs(@"c:\two.csv", Microsoft.Office.Interop.Excel.XlFileFormat.xlCSVWindows, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlShared, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing); 

    wbWorkbook.Close(false, "", true); 
} 

Is there any simple way to convert .xls file to .csv file? (Excel)

いくつかの他のリソースは事のこのINDを助けることができるオンラインがあります。実際には、このような一般的なものについては、常にソリューションのためにGoogleを用意して、それを自分自身で把握してください。それは技術的なことをする方法を学ぶ最も良い方法です。あなたが立ち往生したり、非常に具体的な質問がある場合、このサイトは質問を投稿するのに最適な場所です。それは私には思われます、あなたはおそらくここから始まりました。あなたは予備作業を自分でやっていませんでした。

関連する問題