1.目的:
(1) csv檔案太大,轉換為EXCEL 後,可削減檔案大小,方便以附檔寄出給各負責人或轉傳其他系統應用
(2) 轉成excel後,因EXCEL應用程式提供許多函式等功能可利用,使用者可依據需求處理各項加工作業
2.程式功能
(1)利用引數帶入對象檔案及欲更新之範圍,讓程式能彈性廣泛應用
(2)當csv 檔內資料異動時,自動更新至excel檔內,即將csv 檔案內之資料,移至excel檔內
3.本程式處理概要:
(1) 取得3個引數( arguments) ,
即 ① csv file路徑,②excel File路徑,③欲移動的range範圍
(2) 開啟上述引數帶入的 2 個input files,即csv與 xlsx兩檔
(3) Excel 檔內指定range 之內容先清除
(4) 將csv某range內的值移至excel 內同一range內
即將excel 內該range之內容作更新,其他範圍內保留不會變更。
(5) excel更新後,REWRITE儲存檔案
[ 備註 ]
<1>csv to xlsx 可以兩種方法:
<1.1> csv 讀取後,全部內容存入xlsx
<1.2> csv 讀取後,只有指定range之內容更新至xlsx
<2>excel 出力時可以有兩種方法:
rewrite (可保留舊xlsx 內容) 或 new add write
<3>excel副檔名可以儲存兩種格式:
save file format ---51: xlsx
52: xlsm
<4>本程式設計考慮點:
① 利用引數指定csv, excel 路徑及欲更新range範圍,範圍可任意決定
② 指定range範圍,更新後再存入excel,以rewrite 出力(保留部分舊資料與函式)
③ excel副檔名,儲存為xlsx
4. 本程式編寫 : (程式名稱 csv2excel2.vbs)
'----- input csv file save to excel , notes range A:G
'----- output xlsx file can be either rewrite or new-add write ---
if WScript.Arguments.Count < 2 Then
WScript.Echo"Please specify the input csv and the output xlsx file"
Wscript.Quit
End If
Set objFSO = CreateObject("Scripting.FileSystemObject")
'csvP csv file 路徑
csvP = objFSO.GetAbsolutePathName(Wscript.Arguments.Item(0))
'xlsxP output excel file 路徑
xlsxP = objFSO.GetAbsolutePathName(WScript.Arguments.Item(1))
set arg = WScript.arguments
'即 WScript csv2excel2.vbs %csvP% %xlsxP% G 三個引數
'csv_format = 6
xlsx_format = 51
Dim xlapp ' as excel object
Dim x, y ' as workbook
Set xlapp = CreateObject("Excel.Application")
'xlapp.displayalerts=false
' x open 開啟csv工作表
Set x = xlapp.Workbooks.Open(csvP)
' y open 開啟excel工作表
Set y = xlapp.Workbooks.Open(xlsxP)
'set y=xlapp.Workbooks.Add ' y new add
' get range from "A:arg(2)" 即 A:G
rangB = "A:"&arg(2)
'y sheets(1) 某range內容,更新前先作清除clear
y.Sheets(1).Range(rangB).ClearContents
'y.Sheets(1).Range("A:G") = x.Sheets(1).Range("A:G").Value 'only get range A:G
' get range from rangB, 即 x 內資料移至y
y.Sheets(1).Range(rangB) = x.Sheets(1).Range(rangB).Value
' y rewrite; y file need exist already
y.Save
'y.SaveAs xlsxP ' y new add write
' msgbox " --- csv2xlsx2.vbs finish ! "
y.close
x.Close
xlapp.Quit
Wscript.Quit
5. 本程式實際執行
5.1 cmd 內輸入如下:
WScript csv2excel2.vbs EventLevelView.csv EventLevel_select_output.xlsx G
5.2本程式所帶入的三個引數如下
①csvPath= EventLevelView.csv
②xlsxPath= EventLevel_select_output.xlsx
③range 範圍= G ,表示指定範圍為range (A:G)
5.3 程式執行後,excel 檔案內容被更新,如下圖
6.1 除了讀取csv檔,亦可改為讀取txt檔之資料,來更新 excel
6.2 若excel 內含有巨集公式,副檔名改存為xlsm
6.3 excel更新後,亦可改為另存新檔
6.4 作成bat執行檔,排入Windows 工作排程(taskscheduler),讓其自動執行
---by linct-----