Несогласованный вывод пустых столбцов в файле CSV (Microsoft Excel)
Марк заметил странную вещь, когда дело доходит до создания файлов CSV с помощью Excel: файлы не всегда совпадают по тому, как они заканчивают каждую строку в выходных данных. Когда он создает файл CSV, который имеет, возможно, 70 полей (столбцов) данных, а затем просматривает файл CSV в текстовом редакторе, он заметил, что все записи содержат символы возврата каретки, но в разных местах. Некоторые записи содержат строку запятых, представляющую пустые поля, а затем заканчиваются в «нужном» месте; другие заканчиваются сразу после последнего заполненного столбца; в некоторых есть несколько запятых, но их недостаточно для всех пустых полей. Марк задавался вопросом, почему это происходит, и как он может заставить файлы CSV содержать постоянное количество полей вывода.
Один относительно простой способ обойти эту проблему — включить в данные полностью заполненное «фиктивное» поле перед сохранением в формате CSV. Например, если в вашей таблице 70 столбцов, в ячейке A71 введите точку. Скопируйте содержимое этой ячейки вниз на столько строк, сколько у вас есть в таблице. Когда вы затем экспортируете рабочий лист в CSV, Excel будет включать фиктивное поле, но, что более важно, будет включать правильное количество разделителей полей (запятых) перед этим последним полем в каждой записи.
Если вам не нужно пустое поле, попробуйте следующее:
-
Выберите одну из ячеек в строке заголовка.
-
Нажмите Shift + Ctrl + 8. Выбирается вся таблица данных.
-
Нажмите Ctrl + H, чтобы открыть вкладку «Заменить» в диалоговом окне «Найти и заменить». (См. Рис. 1.)
-
Убедитесь, что поле «Найти» полностью пусто.
-
В поле «Заменить на» введите один пробел.
-
Щелкните «Заменить все». Excel должен сообщить вам, сколько замен было произведено.
Эти шаги заменяют все пустые ячейки ячейками, содержащими один пробел. Затем вы можете выполнить экспорт в CSV, и нужное количество полей будет экспортировано для каждой отдельной строки.
Наконец, если вы регулярно экспортируете большие таблицы в формат CSV, вы можете создать макрос, который будет создавать файл за вас. Ниже приводится лишь один пример типа макроса, который вы можете использовать:
Sub CreateCSV() Dim wkb As Workbook Dim wks As Worksheet Dim wksOri As Worksheet Dim iCols As Integer Dim lRow As Long Dim iCol As Integer Dim lRows As Long Dim sFilename As String Application.ScreenUpdating = False sFilename = "C:\test.csv" Set wksOri = ActiveSheet iCols = wksOri.Cells. _ SpecialCells(xlCellTypeLastCell).Column lRows = wksOri.Cells. _ SpecialCells(xlCellTypeLastCell).Row Set wkb = Workbooks.Add Set wks = wkb.Worksheets(1) For lRow = 1 To lRows For iCol = 1 To iCols With wks.Cells(lRow, 1) If iCol = 1 Then .Value = wksOri.Cells(lRow, iCol).Text Else .Value = .Value & "," & _ wksOri.Cells(lRow, iCol).Text End If End With Next Next Application.DisplayAlerts = False wkb.SaveAs FileName:=sFilename, _ FileFormat:=xlCSV wkb.Close Application.DisplayAlerts = True wksOri.Parent.Activate Application.ScreenUpdating = True MsgBox sFilename & " saved" Set wks = Nothing Set wkb = Nothing Set wksOri = Nothing End Sub
Макрос создает совершенно новую книгу, а затем «компилирует» в столбец A первого листа книги информацию из исходного листа. Эти данные, которые будут содержать разделитель для каждого поля в оригинале, затем сохраняются в виде файла CSV. Наконец, временная книга удаляется.
Путь и имя файла CSV жестко закодированы в коде (переменная sFileName), хотя при желании его можно изменить, чтобы код запрашивал имя файла.
ExcelTips — ваш источник экономичного обучения Microsoft Excel.
Этот совет (3068) применим к Microsoft Excel 97, 2000, 2002 и 2003.