Сохранить Excel Excel как CSV с нулем и точкой с запятой в качестве разделителя - PullRequest
1 голос
/ 26 февраля 2012

Я экспортирую Excel.Worksheet в C #, как это:

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

это работает почти нормально, но мне нужно заставить две вещи:

  • "Разделитель полей" должен быть точкой с запятой (;). Я получаю запятую (,)
  • «Разделитель текста» всегда должен быть нулевым. Я получаю двойные кавычки ("")

Документация абсолютно бесполезна (что, черт возьми, такое xlTextWindows: указывает тип текстового формата. Предполагается, что это означает?)

Есть идеи?

Ответы [ 2 ]

1 голос
/ 29 февраля 2012

Спасибо, ребята, но я искал что-то немного менее неуклюжее.

В любом случае, поскольку я находился всего в нескольких шагах от закрытия проекта, я собрал не элегантное, но рабочее решение, подобное этому:*

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 голос
/ 26 февраля 2012

Решение 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

источник проверен и работает. Теперь, я не уверен, о каком текстовом разделителе вы говорите "", но я не столкнулся с этим Если вы пойдете по пути VBA, дайте мне знать, если это все еще происходит, и мы изменим код. Если это решение VBA совершенно бесполезно для вас, я прошу прощения!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...