ファイルである必要があるセルの値を取得し、xlwings と VBS スクリプトを使用して csv ファイルに変換するマクロがあります。このマクロはボタンに割り当てられます。
以下は関数の例です。
import subprocess
from xlwings import Workbook, Range
def extract_excel_sheet_to_csv(filename, sheet_name, working_dir, csv_filename):
wb = Workbook.caller()
new_filename = os.path.join(working_dir, filename)
cmd = ''.join(['cscript extract_excel_sheet_to_csv.vbs "',
new_filename, '" "', sheet_name, '" "',
working_dir, '" "', csv_filename, '"'])
cmd = cmd.encode("utf8")
subprocess.call(cmd)
filename = Range(sheet_arxikh, status_cell).value # Example data.xlsb
sheet_name = u"Αρχείο"
working_dir = os.path.dirname(wb.fullname)
csv_filename = "data.csv"
convert_file(filename, sheet_name, working_dir, csv_filename)
wb.fullname は次のようなものを与える:"c:\projects\buy_sell\data.xlsb"
なので、working_dir は になります"c:\projects\buy_sell\"
。これにより、次の VBS スクリプトを使用してファイルパスに問題が発生します。私が使用するr"c:\projects\buy_sell"
と、うまく動作します。
これは私が使用する VBS スクリプトです。
Set objFSO = CreateObject("Scripting.FileSystemObject")
src_file = Wscript.Arguments.Item(0)
sheet_name = Wscript.Arguments.Item(1)
dir_name = Wscript.Arguments.Item(2)
file_name = Wscript.Arguments.Item(3)
WScript.Echo src_file
WScript.Echo sheet_name
WScript.Echo dir_name + "\" + file_name + ".csv"
REM WScript.Echo dir_name
REM WScript.Echo file_name
Dim objExcel
Set objExcel = CreateObject("Excel.Application")
objExcel.Visible = False
Dim objWorkbook
Set objWorkbook = objExcel.Workbooks.open(src_file)
objWorkbook.Sheets(sheet_name).Copy
objExcel.DisplayAlerts = False
objExcel.ActiveWorkbook.SaveAs dir_name + "\" + file_name + ".csv", 6
objWorkbook.Close False
objExcel.Quit