Excelファイルの読み込み
目的
Excelファイルを読み込みます。
ソリューション
ExcelファイルをWindowsクリップボードに書き込むJavaScript関数を使用します。 次に、CopyTextを使用してクリップボードを読み取ります。
別の方法があります。たとえば、Excelオートメーションを使用してJavaScriptで各セルの値を読み取り、各セルのGuiXT変数を入力します。 これは、一部のカラムや行のサブセットのみが必要な場合に適しています。ここで説明するソリューションはすべてのデータを読み取るのに比較的単純で高速なアプローチです。 また、Excelファイルごとに同じJavaScript関数を使用できるという利点もあります。
JavaScript関数excel_to_clipboard()
この関数は、基本的に次の3つの操作で構成されています。
// create Excel automation object
var XL = guixt.CreateObject(“Excel.Application”);
// open file
var wBook = XL.Workbooks.Open(path)
// write file to clipboard
wBook.ActiveSheet.UsedRange.Copy
以下の完全な関数では、エラー処理 “E: Excel file not found” を追加し、Excelファイルの最後に度々存在する空の行を削除します。 また、すべてのオブジェクトを正しく解放します。そうしないと、Excelインスタンスがバックグラウンドで実行され続けます。
function excel_to_clipboard(path) {
var XL = guixt.CreateObject(“Excel.Application”); XL.Visible = false; XL.DisplayAlerts = false;
var wBook = null;
try { wBook = XL.Workbooks.Open(path) } catch (e) { return “”; }
// copy to clipboard wBook.ActiveSheet.UsedRange.Copy;
// we remove empty rows via the “PasteSpecial” function var tempSheet = XL.ActiveWorkbook.Sheets.Add; tempSheet.UsedRange.PasteSpecial(null, null, true); tempSheet.UsedRange.Copy; tempSheet = null;
wBook.Close(false); wBook = null; XL.Quit; XL = null;
return “X”;
} |
サンプル例
以下のExcelファイルを読み取り、SAPGUIテーブルに表示します。
InputScriptは、1675行6列で構成されるデモファイルを読み取り、テーブルを作成するのにかかる時間は約1秒です。
GuiXT script
Pushbutton (toolbar) “Load operations” _
process=“load_operations.txt”
if V[opcount>0]
Table (2,2) (30,135) name=“operations” rows=“&V[opcount]” _
fixedcolumns=6 title=“Orders and Operations”
Column “Order” name=“aufnr” size=8
Column “Description” name=“ktext” size=40
Column “Operation” name=“vornr” size=8
Column “Short text” name=“ltxa1” size=40
Column “Workplace” name=“arbpl” size=10
Column “Syst.State” name=“sttxt” size=20
endif
Input script
CallJS found = excel_to_clipboard _
“C:\temp\operations.xlsx”
if not V[found]
return “E: Excel file not found” -statusline
endif
// read data from clipboard
CopyText toText=“tmp” -fromCLipboard
// we need a TAB character (Hexcode 09)
Set text[TAB] “X”
ReplaceText TAB from=“X” toHexCode=“09”
Set V[TAB] “&text[TAB]”
// clear all cell values and table status
Clear V[operations.*]
// row index
Set V[k] 1
label next_row
CopyText fromText=“tmp” toString=“s” line=“&V[k]”
if Q[ok]
CopyText fromString=“s” toText=“cells”
// order number
CopyText fromText=“cells” line=1 _
toString=“operations.cell.aufnr.&V[k]” _
delimiter=“&V[TAB]”
// description
CopyText fromText=“cells” line=2 _
toString=“operations.cell.ktext.&V[k]” _
delimiter=“&V[TAB]”
// operation number
CopyText fromText=“cells” line=3 _
toString=“operations.cell.vornr.&V[k]” _
delimiter=“&V[TAB]”
// operation text
CopyText fromText=“cells” line=4 _
toString=“operations.cell.ltxa1.&V[k]” _
delimiter=“&V[TAB]”
// workplace
CopyText fromText=“cells” line=5 _
toString=“operations.cell.arbpl.&V[k]” _
delimiter=“&V[TAB]”
// system status
CopyText fromText=“cells” line=6 _
toString=“operations.cell.sttxt.&V[k]” _
delimiter=“&V[TAB]”
// next row
Set V[k] &V[k] + 1
goto next_row
endif
Set V[opcount] &V[k] – 1
return “S: &V[opcount] operations loaded” -statusline
備考
InputScriptは、固定ファイル名を想定しています。 ユーザーにExcelファイルを選択させたい場合は、SelectFileを追加します。
現在のクリップボードのコンテンツを上書きしたくない場合は、InputScriptの開始時にクリップボードを保存し、最後にそのコンテンツを復元します。
CopyText toText=“clip” -fromClipboard
….
CopyText fromText=“clip” -toCLipboard