Excel: Сохранить как CSV через VBA и вручную приводит к другому файлу

StackOverflow https://stackoverflow.com//questions/23058398

  •  26-12-2019
  •  | 
  •  

Вопрос

Мне нужно сохранить несколько XLSM-файлов в качестве CSV, чтобы импортировать их в другие программы (например, r и т. Д.). Ну, я написал необходимые процедуры импорта во всех других программах, и они очень хорошо работают с помощью случая 1:

Case 1: вручную сохранение XLSM в виде CSV Если я использую эту опцию и вручную сохраняю каждый файл в виде CSV, и щелкните «Да» на всех подсказках, я получаю файл .csv, который выглядит очень похоже на нормальный файл Excel, когда снова открывается в Excel. Это стандартный вид столбца, и ничего не разделена запятой и т. Д. (Может быть, это так, но это не выглядит таким образом ..)

Case 2: Сохранение XLSM от VBA в виде CSV Ну вот я получаю совершенно другой файл, когда снова открывается в Excel. Этот выглядит как «реальный» файл CSV со всеми значениями, являющимися запятой.

Мои вопросы: 1. Почему есть никакая разница? 2. Как я могу программно достичь случая 2 от VBA? Или это невозможно?

Если 2 невозможно, я должен переписать свои процедуры ввода импорта, чтобы обрабатывать «нормальный» файл CSV ... не очень сложно, но еще много работы, и мне действительно интересно, почему даже это разница .. < / P >.

Это было полезно?

Решение

Q1: Я не думаю, что есть разница, по крайней мере, не в примере, которую я вытащил вместе. q2: Попробуйте это:

У меня есть 3 пример файлов XLSM в C:\stack\folder1, как на фото ниже:

Start2

Каждый файл имеет один лист данных, который мы превратимся в CSV:

Пуск

Я уверен, что ваша рутина гораздо сложнее, но для проверки вывода CSV я просто собираюсь закрутить файлы и сохранить каждый как xlCSV:

Option Explicit
Sub TestCSVOutput()

Dim DataBook As Workbook
Dim DataSheet As Worksheet
Dim FilePaths(3) As String
Dim FileIdx As Long

'set up file paths for test
FilePaths(1) = "C:\stack\folder1\test_file_01.xlsm"
FilePaths(2) = "C:\stack\folder1\test_file_02.xlsm"
FilePaths(3) = "C:\stack\folder1\test_file_03.xlsm"

'loop through array and save each file as a CSV
Application.DisplayAlerts = False
For FileIdx = 1 To UBound(FilePaths)

    Set DataBook = Workbooks.Open(FilePaths(FileIdx))
    Set DataSheet = DataBook.ActiveSheet
    DataBook.SaveAs FileFormat:=xlCSV '<~~ the save step
    DataBook.Close

Next FileIdx
Application.DisplayAlerts = True

End Sub
.

Как только скрипт завершится, я в конечном итоге с тремя файлами CSV:

End2

Каждый файл - запятее, если они открываются в текстовом редакторе:

Введите описание изображения здесь

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top