Excel:Salvar como csv através de vba e manualmente resultados em um arquivo diferente

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

  •  26-12-2019
  •  | 
  •  

Pergunta

Eu preciso salvar vários arquivos xlsm como CSV para importar-los em outros programas (por exemplo, R, etc.).Bem, eu escrevi o necessário importar rotinas em todos os outros programas e trabalham muito bem com o caso 1:

Caso 1:Guardar manualmente um xlsm como CSV Se eu usar essa opção e salvar manualmente cada arquivo CSV e clique em SIM em todas as perguntas, eu recebo um .arquivo csv que parece muito semelhante a um arquivo do Excel quando abriu novamente no excel.É um padrão de coluna de vista, e nada, separados por vírgulas etc.(talvez seja, mas não me parece que o caminho..)

Caso 2:Salvar um xlsm do VBA como CSV Bem, aqui eu recebo um arquivo totalmente diferente, quando abriu novamente no Excel.Este parece um "real" arquivo csv com todos os valores separados por vírgulas.

Minhas perguntas são:1.Porque é que há alguma diferença?2.Como programaticamente posso chegar a 2 de Caso a partir do VBA?Ou isso é impossível?

Se 2 é impossível eu ter que reescrever o meu código de importação rotinas para lidar com o "normal" arquivo csv...não é muito difícil, mas ainda muito trabalho e eu estou realmente querendo saber por que há mesmo uma diferença..

Foi útil?

Solução

Q1: Eu não acho que há uma diferença de, pelo menos não em um exemplo que eu separei. Q2: Tente isto:

Eu tenho 3 exemplo XLSM arquivos em C:\stack\folder1 como na foto abaixo:

start2

Cada arquivo tem uma única folha de dados, o que nós vamos transformar em CSVs:

start

Tenho certeza de que a sua rotina é muito mais complicado, mas para testar a saída CSV, eu estou indo só para percorrer os arquivos e salve cada um como 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

Uma vez que o script for concluído, eu termino com três arquivos CSV:

end2

Cada arquivo é delimitado por vírgula quando aberto em um editor de texto:

enter image description here

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top