Excel: Salva come CSV tramite VBA e manualmente risultati in un file diverso
Domanda
Ho bisogno di salvare diversi file XLSM come CSV per importarli in altri programmi (come r ecc.). Bene, ho scritto le necessarie routine di importazione in tutti gli altri programmi e funzionano molto bene con il caso 1:
Caso 1: salvataggio manuale di un XLSM come CSV Se utilizzo questa opzione e salva manualmente ciascun file come CSV e fare clic su Sì su tutti i prompt, ottengo un file .csv che assomiglia molto simile a un normale file Excel quando è stato inaugurato in Excel. È una vista di colonna standard e nulla separato con la virgola ecc. (Forse lo è, ma non sembra così ..)
Caso 2: Salvataggio di un XLSM da VBA come CSV Bene, ottengo un file completamente diverso quando è stato aperto di nuovo in Excel. Questo sembra un file CSV "reale" con tutti i valori che sono separati da virgola.
Le mie domande sono: 1. Perché c'è qualche differenza? 2. Come posso registrare programmaticamente caso 2 da VBA? O è impossibile?
Se 2 è impossibile da riscrivere le mie routine del codice di importazione per gestire il file CSV "normale" ... non molto difficile ma ancora molto lavoro e mi sto davvero chiedendo perché ci sia anche una differenza. < / P >.
Soluzione
Q1: Non penso che ci sia una differenza, almeno non in un esempio ho tirato insieme. Q2: Prova questo:
Ho 3 Esempio di file XLSM in C:\stack\folder1
come nella foto di seguito:
Ogni file ha una singola scheda tecnica, che si trasformerà in CSVS:
Sono sicuro che la tua routine è molto più complicata, ma per testare l'uscita CSV, sto per andare in loop attraverso i file e salvare ciascuno come 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
.
Una volta completato lo script, finisco con tre file CSV:
Ogni file è virgola delimitato quando è stato aperto in un editor di testo: