自動化:クイックスタートまたは「まあ、エクセル、自分で書いてください!」

ms officeドキュメントの自動処理のための簡単なスクリプト作成のための小さなベビーベッドトピック。 また、空白シート症候群を克服するのに役立ちます。



最近のトピックで正しく指摘されているように、スクリプト自体は高速ではないかもしれませんが、結果自体はより重要であり、ボリュームは常にそれほど大きくありません。 ただし、オートメーションを使用すると、ほぼすべての言語でスクリプトを作成できます。 ここではJavaScriptとIronPythonに空白を付けますが、他の言語(PowerShellなど)のコメントに場所があることを願っています。





少し歌詞



自動化を実行するには、次のものが必要です。



もう一度繰り返します。 目標は、複雑な要件(パフォーマンス、埋め込み、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のマクロエディターです。 実行したいアクションを書き留め( 「表示」->「マクロ」->「マクロを記録... 」、名前は関係ありません)、そのコードを開き( 「表示」->「マクロ」->「マクロを表示...」 )、画像や肖像画で実行します。 マクロの記録自体は、自動化するアクションのセットにすぎません。 たとえば、値の挿入または変更、色/フォントの変更など。 マクロの記録は、回避するために別のドキュメントで行うのが最適です。



オブジェクト世界の方向性を高めるために、Excel オブジェクトの世界はクラスシステムです (同じことですが、 Office 2010の場合 )。



小さなボーナス: カラーインデックスの定数



PSどこかでC ++からオートメーションを操作するためのコードがありましたが、それは別の話です:)



All Articles