2012-02-26 9 views
1

として私はこのようなC#でExcel.Worksheetを輸出しています:保存Excelワークシートヌルとセミコロン区切り

myWorksheet.SaveAs(myPath, Excel.XlFileFormat.xlCSV); 

それはほとんどOK動作しますが、私は二つのことを強制する必要があります。

  • 「フィールドセパレータ」はセミコロン(;)でなければなりません。
  • "text separator"は常にnullにする必要があります。私は二重引用符を取得(「」)

The documentationは全く役に立たないです(地獄とは何か「だxlTextWindows:。?テキスト形式の種類を指定」を意味するはず)

任意のアイデアを?セミコロンでカンマを交換する

+1

フィールドセパレータのカンマがCSVの "c"の略語であるため、カンマが表示されます。私はExcelの組み込み形式の長いリストに慣れていませんが、あなたのニーズに合ったものを見つけられない可能性が高いと思います。これが1回限りの操作であれば、このタスクを達成するためにグローバルな検索と置換を行うのはかなり簡単です。あなたが何度も何度もやる必要があるのでしょうか?あなたはこれをC#でタグ付けしました。後処理の検索と置換を行うC#コードに興味がありますか? – kmote

+0

'xlTextWindows'は改行文字を定義する多くの定数の1つです。 WindowsはCR LFを使用しました。 Excelでは、ワークブックをCSV形式で保存すると、コンマが含まれていない限り、テキストフィールドの周囲に二重引用符が配置されません。 C#が異なるか、フィールドにカンマがあります。小数点区切り記号がカンマで指定されている場合、ExcelはセミコロンをCSV区切り記号として使用することを理解しています。これは通常国家の設定ですが、C#には一時的な国の設定を可能にする機能があり、試してみる価値があります。 –

答えて

1

ありがとうございましたが、少し不気味なものを探していました。私はちょうど歩プロジェクトを閉じてからだったので

とにかく、私はこのように一緒に洗練が、作業溶液を入れて:

static public void WorksheetToCSV(Excel.Worksheet origine, string CSVoutPath, string fieldSeparator, string textSeparator) 
    { 
     Excel.Range rngCurrentRow; 
     string lineaDaScrivere; 
     TextWriter csv = new StreamWriter(CSVoutPath); 


     for (int i = 1; i <= origine.UsedRange.Rows.Count; i++) 
     { 
      rngCurrentRow = origine.UsedRange.get_Range("A" + i, "A" + i).EntireRow; 
      lineaDaScrivere=""; 

      foreach (Excel.Range cella in rngCurrentRow.Columns) 
      { 
       try 
       { 
        lineaDaScrivere = lineaDaScrivere + textSeparator + cella.Value.ToString() + textSeparator + fieldSeparator; 
       } 
       catch (NullReferenceException ex) 
       { 
        break; 
       } 
      } 
      lineaDaScrivere=lineaDaScrivere.Substring(0, (lineaDaScrivere.Length - fieldSeparator.Length)); 

      csv.WriteLine(lineaDaScrivere); 
     } 

     csv.Close(); 
    } 

あり、より良い解決策がありますが、私にとっては予想通り、これは働いていました。

+1

独自のCSVパーサ/ジェネレータを記述しないでください。すべての不具合を処理する[図書館](http://www.filehelpers.com/)があります。あなたのケースでは、文字をエスケープしていないので、CSVの出力が正しくない可能性があります。 – Laoujin

1

VBA(ないC#)ソリューションは、次のとおりです。

テスト
Sub CreateCSV() 

Dim rCell As Range 
Dim rRow As Range 
Dim sOutput As String 
Dim sFname As String, lFnum As Long 

'Open a text file to write 
sFname = "C:\MyCsv.csv" 
lFnum = FreeFile 

Open sFname For Output As lFnum 
'Loop through the rows' 
    For Each rRow In ActiveSheet.UsedRange.Rows 
    'Loop through the cells in the rows' 
    For Each rCell In rRow.Cells 
     sOutput = sOutput & rCell.Value & ";" 
    Next rCell 
    'remove the last comma' 
    sOutput = Left(sOutput, Len(sOutput) - 1) 

    'write to the file and reinitialize the variables' 
    Print #lFnum, sOutput 
    sOutput = "" 
Next rRow 

'Close the file' 
Close lFnum 

End Sub 

sourceと作品。さて、私はあなたが""であることについて話しているテキストセパレータがわかりませんが、私はそれに踏み込んでいません。あなたがVBAの方法に行くなら、それがまだ起こっていることを私に教えてください。私たちはコードを変更します。このVBAソリューションがあなたにとって全く役に立たない場合、私はお詫び申し上げます!

関連する問題