Марк заметил странную вещь, когда дело доходит до создания файлов CSV с помощью Excel: файлы не всегда совпадают по тому, как они заканчивают каждую строку в выходных данных. Когда он создает файл CSV, который имеет, возможно, 70 полей (столбцов) данных, а затем просматривает файл CSV в текстовом редакторе, он заметил, что все записи содержат символы возврата каретки, но в разных местах. Некоторые записи содержат строку запятых, представляющую пустые поля, а затем заканчиваются в «нужном» месте; другие заканчиваются сразу после последнего заполненного столбца; в некоторых есть несколько запятых, но их недостаточно для всех пустых полей. Марк задавался вопросом, почему это происходит, и как он может заставить файлы CSV содержать постоянное количество полей вывода.

Один относительно простой способ обойти эту проблему — включить в данные полностью заполненное «фиктивное» поле перед сохранением в формате CSV. Например, если в вашей таблице 70 столбцов, в ячейке A71 введите точку. Скопируйте содержимое этой ячейки вниз на столько строк, сколько у вас есть в таблице. Когда вы затем экспортируете рабочий лист в CSV, Excel будет включать фиктивное поле, но, что более важно, будет включать правильное количество разделителей полей (запятых) перед этим последним полем в каждой записи.

Если вам не нужно пустое поле, попробуйте следующее:

  1. Выберите одну из ячеек в строке заголовка.

  2. Нажмите Shift + Ctrl + 8. Выбирается вся таблица данных.

  3. Нажмите Ctrl + H, чтобы открыть вкладку «Заменить» в диалоговом окне «Найти и заменить». (См. Рис. 1.)

  4. Убедитесь, что поле «Найти» полностью пусто.

  5. В поле «Заменить на» введите один пробел.

  6. Щелкните «Заменить все». 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.