2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

python xlwings 列挿入

Last updated at Posted at 2019-08-30

余計なインポートたくさんありますがxlwingsがあればいけると思います。

概要:同階層にあるエクセル開いてC列にインサートして右にずらす

insert.py
import sys
import os
import glob
import re
import os.path
import string
import shutil
import struct
import xlwings as xw
from xlwings import constants
from xlwings import Book
from xlwings import Sheet
from xlwings import Range

def main():
    
    path=os.path.dirname(os.path.abspath(__file__))
    wb = xw.Book(path + "\\test.xlsx")
  #C列指定のインサートじゃい!
    wb.sheets(1).range('c:c').api.Insert()
    #オプション付き
  #wb.sheets(1).range('c:c').api.Insert(constants.Direction.xlToRight)

    print("Finish!!!!")

#################################################
if __name__ == '__main__':
	main()

一番重要な所はここでVBAとopenpyxlにはRangeクラスにInsertがあるのですがxlwingsには無いです。
wb.sheets(1).range('c:c').api.Insert()
なので「api」を使用してVBAの関数達を呼ばないといけません。罠かよ。
apiでリファレンスにはネイティブオブジェクトを返す。とだけしかないてないのでネイティブオブジェクトなんだよってスルーしてたのですが超重要だった。

apiはインテリセンスが自分の場合は出てこなくてVBAの関数リスト見ながら叩きました。
あとはインサート時に右にずらすとかそういうオプションはconstants.Direction.xlToRightだと思う。

おすすめのデバッグ方法はエクセル開きっぱなして実行していった方が良いです。
最終的にはsave closeよばないとですが開発中で見ながらできるので分かりやすい。
実行に失敗するとエクセルのプロセスが貯まってタスクマネージャー開いてわざわざ消さないとなので
面倒くさい。

2
3
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?