Ошибка 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.