Excel: Как добавить двойные кавычки в строки только в файле CSV - PullRequest
1 голос
/ 11 мая 2009

Я хочу создать файл CSV из Excel, в котором строковые значения должны быть в двойных кавычках, а значения даты должны быть в формате MM / dd / yyyy. Все числовые и логические значения должны быть без кавычек.

Как бы я поступил об этом?

Ответы [ 2 ]

7 голосов
/ 12 мая 2009

Довольно страшно, что Excel не позволяет указывать форматы. Вот ссылка на MrExcel, которая также может оказаться полезной для вас.

http://www.mrexcel.com/forum/showthread.php?t=320531

Вот код с этого сайта:

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")

If FName <> False Then
  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 If
End Sub
2 голосов
/ 12 мая 2009

Для этого проще использовать VBA. Метод SaveAs объекта Workbook позволяет выбирать только предварительно определенные форматы, а метод xlCSV не разделяет строки двойными кавычками.

Для этого в VBA:

Dim fileOut As Integer

fileOut = FreeFile
Open "C:\foo.csv" For Output As #fileOut

Write #fileOut, 14, "Stack Overflow", Date, True

Close #fileOut

(NB Date - это оператор VBA, который возвращает текущую системную дату в качестве варианта подтипа Date)

Если вы затем изучите файл в Блокноте:

14, «Переполнение стека», # 2009-05-12 #, # TRUE #

Строка была разделена, как требуется, дата преобразована в универсальный формат, а дата и логическое значение разделены знаком #.

Чтобы прочитать данные обратно, используйте оператор Input #, который будет интерпретировать все значения соответствующим образом.

Если вы хотите написать часть строки, а затем закончить писать позже:

Write #fileOut, 14, "Stack Overflow";
Write #fileOut, Date, True

дает тот же результат, что и оригинальная программа. Точка с запятой в конце первого оператора предотвращает запуск новой строки

Строки со встроенными двойными кавычками вызовут проблемы, поэтому вам придется удалить или заменить эти символы

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