Python Tech xlwings

Python xlwings 行方向にデータ入力する方法

xlwings はPythonからExcelを操作できるフリーライセンスのライブラリです。

一部機能はプロ版(xlwings PRO)でないと利用できませんが、データ更新やJupyter Notebookとの連携などの基本的な機能は無料で開発できます。

今回は基本的な使い方の確認です。range()の使い方、リストやDataFrameのデータをExcelに反映する方法を解説しています。

 

結論

行列データのうち、1次元のリストは列方向に入力されます。

sheet.range('A1').value = [1, 2, 3, 4, 5]

 

2次元リストでは、各行が入れ子になったリストで表されます。
そのため、行方向にデータ入力するには、2次元リストで次のように表現します。

sheet.range('A1').value = [[1], [2], [3], [4], [5]]

 

実行環境

Windows 10 Pro

Office Excel 2019

$ python --version
Python 3.9.4

$ pip freeze | find "xlwings"
xlwings==0.20.5

 

複数データの更新(リスト)

データを更新(入力)するにはrange()で入力範囲を選択し、valueに設定します。

横(列)方向にデータ入力するなら1次元リストを設定するだけです。
データをvalueで取得する場合も1次元リストが返されます。

# 横(列)方向
sheet.range('A2').value = [1, 2, 3, 4, 5]
print(sheet.range('A2:E2').value)
# [1.0, 2.0, 3.0, 4.0, 5.0]

 

2次元リストでは、各行が入れ子になったリストに対応します。
タテ(行) 方向にデータ入力するときは、次のように2次元リストで入れ子の形にします。

ここで注意なのですが、valueでそのまま取得すると、列方向の場合と同様に1次元リストが返されます。方向の情報を維持してデータを取得する方法は後述します。

# タテ(行) 方向
sheet.range('A3').value = [[1], [2], [3], [4], [5]]
print(sheet.range('A3:A7').value)
# [1.0, 2.0, 3.0, 4.0, 5.0]

 

1次元リストを入れ子の形に変換するには例えばリスト内包表記で次のようにします。

l = [1, 2, 3, 4, 5]
col = [[s] for s in l]
print(col)
# [[1], [2], [3], [4], [5]]

 

縦と横の特定範囲を更新する場合も、次のように2次元リストを設定すればOKです。

# タテヨコ同時(2 x 2の範囲のデータ)
sheet.range('C4').value = [['foo', 'bar'], ['abc', 1999]]
print(sheet.range('C4:D5').value)
# [['foo', 'bar'], ['abc', 1999.0]]

 

方向の情報を維持してデータを取得する

デフォルトでは range() で行方向を指定しても、value でデータを取得すると1次元リストになります。

縦と横の方向の情報を維持してデータを取得するには、2次元リストとして読み込みます。range()option()ndim=2 を指定します。

# 横(列)方向
sheet.range('A2').value = [1, 2, 3, 4, 5]
c = sheet.range('A2:E2').options(ndim=2).value
print(c)
# [[1.0, 2.0, 3.0, 4.0, 5.0]]

# タテ(行) 方向
sheet.range('A3').value = [[1], [2], [3], [4], [5]]
r = sheet.range('A3:A7').options(ndim=2).value
print(r)
# [[1.0], [2.0], [3.0], [4.0], [5.0]]

 

今回参考にしたページ・資料

データ構造 - xlwings Documentation

 

  • この記事を書いた人

次世代ペンギン

長いのでペンギンとお呼びください。システム開発・プログラミングのお仕事をしています。甘味とコーヒーは生命線。多くの人に役立つ情報のシェアが目標です。

人気の記事

1

会社員でプログラマーとして働いている人、インフラやネットワークのエンジニアとして働いている人の中には、フリーランスのプログラマーとして独立、もしくは転向したい人もいるので ...

2

キャリアアップのため、または高収入を目指して、しっかりプログラミングを学びたいという人が増えてきましたね。 この記事では現役のエンジニアである私が、実際に仕事で稼げるよう ...

3

フリーランスのプログラマーにとって収入の向上に最も直結するのはスキルです。 必要なスキル、スキルの獲得方法が気になる人も多いでしょう。 また、これからフリーランスを目指す ...

4

Vuetifyの v-progress-circular コンポーネントは、数値データや処理状況を環状(円状)のデザインで教えてくれるUIデザインです。 ローディングのス ...

5

Vuexのstore(ストア)を使うと、各コンポーネント間で個別にデータのやり取りすることなく、データを一元的に管理できます。Vueでは欠かせない機能といえるでしょう。 ...

-Python, Tech, xlwings
-, ,