1

ファイルである必要があるセルの値を取得し、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
4

0 に答える 0