Ошибка Excel с запятыми в csv-файлах

У меня есть файл XLS создает CSV-файл с макросом в Excel 2003, у меня есть 40 + столбцов, а последние 3 являются необязательными, поэтому на XLS много пустых значений, когда я запускаю подпрограмму экспорта, она не будет ставить конечную запятую на все строки, почему ? Потому что : http://support.microsoft.com/kb/77295 -.-

в Microsoft Office Excel при сохранении файла в формате текст или CSV (значение, разделенное запятыми) Excel помещает вкладки или запятые между каждым столбцом листа. Однако некоторые текстовые файлы могут быть сохранены с другим количеством вкладок или запятых в 16-строчных блоках.

вот их предлагаемая работа:

чтобы убедиться, что Excel сохраняет разделители табуляции или запятой для всех пустых столбцов, убедитесь, что последний столбец в файле содержит некоторые данные по крайней мере каждые 16 строк по всему файлу. Если блоки строк не содержат данных, добавьте пробелы или другие символы в каждые 16 строк в ячейках последнего столбца или измените порядок столбцов на листе так, чтобы последний столбец на листе всегда содержал информацию.

-.- путь Майкрософт ! -.-

ОК, поэтому моя главная проблема заключается в том, что сгенерированный файл будет проанализирован другой программой из моей области, которая нуждается в этом конкретном формате, как это сейчас я добавляю пустую каждую строку 16, Если поле пустое, это, кажется, делает это, но обработка данных Deparment жалуюсь на это пустое место... ты можешь в это поверить??

в любом случае я также попытался добавить флаг и удалить его с помощью функции find, но ofc при сохранении файла он снова уберет разделители...

спасибо за чтение моей истории; p

какие предложения ?

Edit: к сожалению, с помощью Excel необходимо, данные вводятся вручную через лист excel различными пользователями, коды vba намного больше похожи на генерацию шаблонов так далее.. это единственная проблема, которая у меня есть, и невозможно изменить весь процесс.

4 ответов


руководство по эксплуатации пример;

Dim r As Range: Set r = Range("A1:C10") '// or ActiveSheet.UsedRange for everything
Dim buffer As String, delimiter As String, c As Range
Dim i As Long

For Each c In r
    If (i Mod r.Columns.Count) = 0 Then
        If (Len(buffer)) Then delimiter = vbCrLf
    Else
        delimiter = ","
    End If
    buffer = buffer & delimiter & """" & CStr(c.Value) & """" '//or c.text to preserve formatting
    i = (i + 1)
Next

Open "c:\xxx.csv" For Output As #1
    Print #1, buffer
Close #1

предложение 1) прекратите использовать Excel для создания CSV-файла.

каков ваш источник данных? Откуда Excel получает данные? Возможно, вы можете сделать что-то с исходным источником данных для создания CSV вместо использования Excel в качестве посредника. Если вам нравятся действительно большие молотки, Biztalk является основным инструментом MS для ввода/вывода данных. Немногие могут вытащить это из своего набора инструментов, но собрать пользовательскую программу c# для создания CSV-файла можно за пару несколько часов.

короче говоря: если это вообще возможно, используйте лучший инструмент!


Если у вас нет запятых в ваших данных, было бы очень легко написать текстовый ридер, который проходит и подсчитывает количество столбцов в строке и просто добавляет запятые в конец, если их недостаточно. Это не идеально, но это, вероятно, проще, чем писать пользовательский конвертер Excel в CSV.


самый простой способ:

ActiveWorkbook.SaveAs "MyFileNameAndDir.csv", xlCSV, Local:=True