Ошибка конечной запятой в Excel в CSV-файлах - PullRequest
8 голосов
/ 16 августа 2011

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

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

вот их рекомендуемая работа:

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

-.- путь к Microsoft! -.-

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

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

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

Есть предложения?

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

Ответы [ 4 ]

8 голосов
/ 16 августа 2011

Ручной пример;

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
0 голосов
/ 02 июля 2013

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

ActiveWorkbook.SaveAs "MyFileNameAndDir.csv", xlCSV, Local:=True
0 голосов
/ 16 августа 2011

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

0 голосов
/ 16 августа 2011

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

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

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

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