3

Я пытаюсь сохранить файл в формате .csv, однако Excel не использует стандартный разделитель запятых и кавычки. Вот пример того, что я хочу:

"0","70","0","4/29/2012 12:00","13311250""1","70","0","4/30/2012 12:00","13311250""2","70","0","5/1/2012 12:00","13311250"

Вот что на самом деле дает мне Excel:

0   70  0   4/29/2012 12:00 13311250
1   70  0   4/30/2012 12:00 13311250
2   70  0   5/1/2012 12:00  13311250

Так что же происходит, почему я даже не получаю никаких кавычек? Процесс, которым я следовал, состоял в том, чтобы импортировать файл из .csv (показанный во фрагменте 1), используя параметр данных из текстового файла, я изменил его, затем снова сохранил его как .csv, но я получаю файл, отформатированный вторым способом ,

3 ответа3

2

На следующем сайте показан код макроса VB для выполнения экспорта https://support.chartio.com/knowledgebase/exporting-csv-files-with-double-quotes-from-excel

  1. Откройте файл CSV в Excel> Найти и заменить все вхождения двойных кавычек (").

  2. Следуйте инструкциям, приведенным в этой статье Microsoft KB. Однако вместо использования макроса, представленного в статье Microsoft KB, используйте вместо него приведенный ниже.

Sub QuoteCommaExport()
    ' Dimension all variables.
    Dim DestFile As String
    Dim FileNum As Integer
    Dim ColumnCount As Long
    Dim RowCount As Long
    Dim MaxRow As Long
    Dim MaxCol As Long


   ' Prompt user for destination file name.
   DestFile = InputBox("Enter the destination filename" _
  & Chr(10) & "(with complete path):", "Quote-Comma Exporter")

   ' Obtain next free file handle number.
   FileNum = FreeFile()

   ' Turn error checking off.
   On Error Resume Next

   ' Attempt to open destination file for output.
   Open DestFile For Output As #FileNum

   ' If an error occurs report it and end.
   If Err <> 0 Then
      MsgBox "Cannot open filename " & DestFile
      End
   End If

   ' Turn error checking on.
   On Error GoTo 0

   MaxRow = ActiveSheet.UsedRange.Rows.Count
   MaxCol = Selection.Columns.Count

   MsgBox "Processing this many rows: " & MaxRow 
   MsgBox "Processing this many columns: " & MaxCol

   ' Loop for each row in selection.
   For RowCount = 1 To MaxRow

      ' Loop for each column in selection.
      For ColumnCount = 1 To MaxCol

          ' Write current cell's text to file with quotation marks.
          Print #FileNum, """" & Selection.Cells(RowCount, _
          ColumnCount).Text & """";

          ' Check if cell is in last column.
          If ColumnCount = MaxCol Then
              ' If so, then write a blank line.
              Print #FileNum,
          Else
             ' Otherwise, write a comma.
             Print #FileNum, ",";
          End If
          ' Start next iteration of ColumnCount loop.
      Next ColumnCount
  ' Start next iteration of RowCount loop.
  Next RowCount

' Close destination file.
Close #FileNum
End Sub
0

Я создал текстовый файл с вашим содержимым .csv. После, я:

  1. импортировал .txt в Excel и выбрал с Delimited
  2. Я отмечен tab НЕ comma
  3. Я выбрал General не text

Вот мой вывод:

0,"70","0","4/29/2012 12:00","13311250""1","70","0","4/30/2012 12:00","13311250""2","70","0","5/1/2012 12:00","13311250"

Каждая программа / приложение имеет свою собственную интерпретацию того, что на самом деле является разделителем-запятой. В моем примере с Excel я технически не использовал comma delimited а использовал tab delimited . Вы также можете использовать text delimited , в зависимости от того, что вы пытаетесь достичь.

При просмотре RFC4180, встроенные двойные кавычки должны быть удвоены, а поле должно быть разделено двойными кавычками.

0

Используйте этот скрипт.

Источник: Экспорт Excel CSV с двойными кавычками

Макросы Excel Microsoft предоставляет доступ к Visual Basic в виде макросов из Excel, что позволяет нам делать то, что Excel не может управлять самостоятельно. Чтобы создать макрос VB, откройте редактор Visual Basic (Alt+F11), затем из меню «Вставка»> «Модуль». Это должно открыть новое окно кода модуля, которое вы должны скопировать и вставить в следующий скрипт:

Sub CSVFile()
Dim SrcRg As Range
Dim CurrRow As Range
Dim CurrCell As Range
Dim CurrTextStr As String
Dim ListSep As String
Dim FName As Variant
FName = Application.GetSaveAsFilename("", "CSV File (*.csv), *.csv")
ListSep = Application.International(xlListSeparator)
  If Selection.Cells.Count > 1 Then
    Set SrcRg = Selection
  Else
    Set SrcRg = ActiveSheet.UsedRange
  End If
Open FName For Output As #1
For Each CurrRow In SrcRg.Rows
  CurrTextStr = ìî
For Each CurrCell In CurrRow.Cells
  CurrTextStr = CurrTextStr & """" & CurrCell.Value & """" & ListSep
Next
While Right(CurrTextStr, 1) = ListSep
  CurrTextStr = Left(CurrTextStr, Len(CurrTextStr) - 1)
Wend
Print #1, CurrTextStr
Next
Close #1
End Sub

Это исправило ту же проблему для меня. Я экспортировал CSV из приложения в Excel и при редактировании сохранял файлы CSV. После проверки они были без кавычек вокруг запятых ограниченных значений, но этот скрипт сохраняет CSV-файлы с кавычками, поэтому сохраненный файл можно использовать в других приложениях.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .