Ekspor setiap lembar ke file csv terpisah

Saya perlu secara terprogram melalui skrip VBA/VBS mengekspor semua lembar kerja (total 4 dan saya tahu namanya) ke lembar kerja bernama file csv di folder yang sama, tanpa memuat excel dan menjalankan makro secara manual.

Idealnya skrip akan menggunakan jalur file sumber/nama file.xls dan jalur file ekspor sebagai argumen baris perintah.

Saya telah membaca banyak skrip Excel VBA untuk melakukan hal itu di dalam Excel dan saya telah melihat beberapa skrip untuk memuat buku kerja Excel untuk mengekspor lembar pertama. Namun ketika saya mencoba memadukan keduanya saya mendapatkan kesalahan ini:

(1,12) Akhir Pernyataan yang Diharapkan

Dim source As Workbook
Set source = Application.Workbooks.Open(WScript.Arguments.Item(0), ReadOnly:=True)
For Each sheet In source.Sheets
.SaveAs Filename:= WScript.Arguments.Item(1) & Source.Sheets.Name, FileFormat:=xlCSV
Next sheet
wb.Close

person Adam Mills    schedule 08.12.2011    source sumber
comment
Selamat datang di StackOverflow! Silakan posting kode Anda sehingga orang lain dapat membantu men-debugnya. Upaya yang ditunjukkan selalu dihargai (dan diharapkan).   -  person Excellll    schedule 08.12.2011
comment
Maaf, saya merasa mungkin kode yang saya coba jalankan salah, jadi saya tidak ingin mengirimkannya. Seperti yang saya katakan, saya memiliki vba serupa yang berfungsi mendapatkan lembar pertama, kode ini adalah penggabungan sederhana dengan beberapa skrip buku kerja lainnya.   -  person Adam Mills    schedule 13.12.2011


Jawaban (2)


vbs untuk menjalankan kode ini akan terlihat seperti ini .

  1. File vbs dapat dijalankan dari baris perintah
  2. Nama folder mubazir seolah-olah file tersebut ada (objek FSO mengujinya) maka folder tempatnya berada juga harus ada
  3. Kode ini mengotomatiskan Excel untuk memisahkan lembaran

dua poin penting yang perlu diperhatikan dibandingkan dengan VBA Anda di atas

  • Anda tidak dapat meredupkan objek vbs sebagai string, Buku Kerja, dll (karenanya kesalahan awal Anda). Anda hanya dapat meredupkannya
  • Anda tidak dapat menggunakan konstanta bernama seperti xlCSV di vbscript, maka gunakan 6 di bawah ini sebagai format CSV

    Dim strFilename  
    Dim objFSO  
    Set objFSO = CreateObject("scripting.filesystemobject")  
    strFilename = "C:\temp\test.xlsx"  
    If objFSO.fileexists(strFilename) Then  
      Call Writefile(strFilename)  
    Else  
      wscript.echo "no such file!"  
    End If  
    Set objFSO = Nothing  
    
    Sub Writefile(ByVal strFilename)  
    Dim objExcel  
    Dim objWB  
    Dim objws  
    
    Set objExcel = CreateObject("Excel.Application")  
    Set objWB = objExcel.Workbooks.Open(strFilename)  
    
    For Each objws In objWB.Sheets  
      objws.Copy  
      objExcel.ActiveWorkbook.SaveAs objWB.Path & "\" & objws.Name & ".csv", 6  
      objExcel.ActiveWorkbook.Close False  
    Next 
    
    objWB.Close False  
    objExcel.Quit  
    Set objExcel = Nothing  
    End Sub  
    
person brettdj    schedule 25.12.2011
comment
Itulah yang saya butuhkan, terima kasih banyak, penjelasan yang sangat bagus dan terima kasih telah memberi tahu saya di mana kesalahan saya. Saya telah belajar sesuatu di sini. - person Adam Mills; 12.01.2012
comment
Hargai jika ini dapat diubah untuk membaca nama file apa pun alih-alih melakukan hardcoding pada nama file. - person RAP; 12.05.2021

Untuk membantu Anda memulai:

Diberikan buku kerja Excel yang berisi lembar Demo seperti

-------------------------------
SELECT * FROM Demo
-------------------------------
|F1|F2 |F3        |F4        |
| 1|1.1|12/10/2011|text elm 1|
| 2|2.2|12/11/2011|text elm 2|
| 3|4.4|12/12/2011|text elm 3|
-------------------------------

dan ADODB.Connection dengan ConnectionString seperti:

Provider=MSDASQL.1;Extended Properties="DBQ=<FullPathToYourXls>;Driver={Microsoft
 Excel Driver (*.xls)};

yang Anda butuhkan untuk .Execute adalah pernyataan SELECT INTO seperti

SELECT * INTO [Demo.csv] IN '<PathToYourCsvFolder>' 'Text;' FROM Demo

mendapatkan:

type ..\data\ExcelCsv2\Demo.csv
"F1";"F2";"F3";"F4"
1;1,10;10.12.2011 00:00:00;"text elm 1"
2;2,20;11.12.2011 00:00:00;"text elm 2"
3;4,40;12.12.2011 00:00:00;"text elm 3"

(lokal Jerman)

Pernyataan SELECT INTO akan membuat bagian yang sesuai

[Demo.csv]
ColNameHeader=True
CharacterSet=1252
Format=Delimited(;)
Col1=F1 Integer
Col2=F2 Float
Col3=F3 Date
Col4=F4 Char Width 50

dalam file skema.ini secara otomatis.

person Ekkehard.Horner    schedule 10.12.2011
comment
Terima kasih banyak Ekkehard namun saya tidak menggunakan bahasa konvensional, hal terbaik yang dapat saya capai dari lingkungan saya adalah memanggil skrip vbs sambil meneruskan parameter yang diperlukan. Namun jika string koneksi dapat dijalankan di VBA maka saya mungkin dapat mengganti file xls yang dapat saya pertahankan koneksinya. - person Adam Mills; 13.12.2011
comment
Saya juga tidak melihat bagaimana contoh Anda bekerja dengan banyak lembar di buku kerja, apakah saya melewatkan sesuatu? - person Adam Mills; 13.12.2011