最近のトピックで正しく指摘されているように、スクリプト自体は高速ではないかもしれませんが、結果自体はより重要であり、ボリュームは常にそれほど大きくありません。 ただし、オートメーションを使用すると、ほぼすべての言語でスクリプトを作成できます。 ここではJavaScriptとIronPythonに空白を付けますが、他の言語(PowerShellなど)のコメントに場所があることを願っています。
少し歌詞
自動化を実行するには、次のものが必要です。
- MS Office(ドキュメントがあれば、どうやらインストールされます/インストールされます)
- 選択した言語の通訳(JS、VBS、およびPowerShellの場合、この項目は関係ありません)
- VBAでのコード生成を(記録可能なマクロで)覗くためのMS Office
もう一度繰り返します。 目標は、複雑な要件(パフォーマンス、埋め込み、ms officeなしでの作業など)なしでスクリプトをすばやく作成することです。
実際には、コード
私見、最も合理的なオプションはJScriptまたはVBScript(より正確には、 Windowsスクリプトホスト )です。 インタプリタにはすでにオペレーティングシステムが付属しているため、追加のアクションを実行せずにスクリプトを友人/同僚に配布できます。xls(x)ファイルをエクスプローラのスクリプトにドラッグすると、ジョブが実行されます。
var excel = WScript.CreateObject("Excel.Application"); var fileName = WScript.Arguments.Item(0); try { main(); } catch(e) { // delete excel; throw e; } function main() { //excel.Visible = true; // , - , //var book = excel.Workbooks.Add(); // () var book = excel.Workbooks.Open(fileName); // var sheet = book.Worksheets.Item(1); // ( VBA ) // - for (var i = 1; i <= 10; i++) { // sheet.Range("A" + i).Value = "hello_" + i; } // book.Close(true); // //book.Close(true, newFileName); // ... WScript.Sleep(2000); // , :) }
主な欠点は、デバッグするのが難しいことです(forループで30分だけキルしました-0からの番号付けは、セミコロンの欠落に関するエラーを与えました)。
しかし、目標が迅速に書くことであり、JS / VBSがネイティブで使い慣れたpythonよりもはるかに悪いことがわかっている場合、(IronPython):
# coding=utf-8 # IronPython 2.6 # hint: http://www.ironpython.info/index.php/Interacting_with_Excel import clr, os clr.AddReferenceByName('Microsoft.Office.Interop.Excel, Version=11.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c') from Microsoft.Office.Interop import Excel ex = Excel.ApplicationClass() #ex.Visible = True ex.DisplayAlerts = False def main(): ws = workbook.Worksheets[1] # rowsCount = ws.UsedRange.Rows.Count # - : for i in range(1,11): ws.Range("A{0}".format(i)).Value = 'hello_{0}'.format(i) # workbook = ex.Workbooks.Open( os.path.realpath( 'test.xlsx' ) ) try: main() finally: workbook.Save() workbook.Close()
いくつかの有用な事実
最も重要なヒントは、Excelのマクロエディターです。 実行したいアクションを書き留め( 「表示」->「マクロ」->「マクロを記録... 」、名前は関係ありません)、そのコードを開き( 「表示」->「マクロ」->「マクロを表示...」 )、画像や肖像画で実行します。 マクロの記録自体は、自動化するアクションのセットにすぎません。 たとえば、値の挿入または変更、色/フォントの変更など。 マクロの記録は、回避するために別のドキュメントで行うのが最適です。
小さなボーナス: カラーインデックスの定数 。
PSどこかでC ++からオートメーションを操作するためのコードがありましたが、それは別の話です:)