質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
openpyxl

openpyxlは、Excel2007以降のファイル(xlsx/xlsm/xltx/xltm)を読み書きするためのPythonライブラリです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

Q&A

解決済

1回答

3077閲覧

Excel内の表をカテゴリ別に分割して別のファイルに保存する方法

Zhiye

総合スコア7

openpyxl

openpyxlは、Excel2007以降のファイル(xlsx/xlsm/xltx/xltm)を読み書きするためのPythonライブラリです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

0グッド

0クリップ

投稿2021/01/25 20:09

編集2021/01/26 06:45

実施していること

ExcelをPythonで自動化したいと思い、現在Pythonを勉強中です。
下記の作業を自動化したいと考えています。
![イメージ説明
①ファイル名:管理_202101-XXXX内にある表を、部門別にA、B、Cに分割
②分割したA、B、Cの表を別ファイルで保存する
・ファイル名:管理_202012-A
・ファイル名:管理_202012-B
・ファイル名:管理_202012-C

上記を実施するために、下記の通り考えています。

①ファイル名:管理_202101-XXXX内にある表をfor文で分類
②分類したものを、部門の名前及び月名を前月になるようなファイル名にしてExcel生成
③Excel内にある'XXXXX'(6行目までの文面)を生成したExcelに挿入

import pandas as pd import re import datetime from dateutil.relativedelta import relativedelta import_file_path = 'C:\Users\管理_202101-XXXX.xlsx' excel_sheet_name = 'Sheet1' export_file_path = 'C:\Users\作成データ' now = datetime.datetime.now() last_month = now - relativedelta(months=1) # 説明文(XXXXXXXX・・・)の6行をskiprowsで読み込まない df_order = pd.read_excel(import_file_path, skiprows=6, sheet_name=excel_sheet_name) # “部門(A、B、C)”で表を分類 division_name = df_order['部門'].unique() for i in division_name: df_order_division = df_order[df_order['部門'] == i] df_concat = pd.concat([df_order_division]) df_concat.to_excel(export_file_path+'\'+'管理_'+last_month.strftime('%Y%m')+'-'+i+'.xlsx') ・・・・・

困っていること

skiprowsで読み込まなかった6行を生成したExcelの文頭に挿入したいが、どのようにすればよいかわからない状況

解決方法として、
・skiprowsで読み込まなかった6行分だけのExcel(ファイル名:表題のみ.xlsx)をopenpyxlにより生成
・この“表題のみ”のExcelを上記で生成した各Excelに挿入すればよいのではないか、
と考えました。

コードを書きましたがうまくいかない状況です。
誠に申し訳ありませんが、アドバイスを頂ければ大変助かります。
宜しくお願い致します。

(実施していることの続き)

import_file_path_02 = export_file_path+'\'+'管理_'+last_month.strftime('%Y%m')+'-'+i+'.xlsx' #コピー先のエクセルを読み込む wb1 = openpyxl.load_workbook(import_file_path_02) ws1 = wb1['Sheet1'] #コピー元のエクセルを読み込む wb2 = openpyxl.load_workbook('C:\Users\表題のみ.xlsx') ws2 = wb2['管理'] #コピー先の1行目から15行挿入 ws1.insert_rows(1,15) #コピー元のコピー範囲を指定して貼り付け for i in range(1,23): for j in range(1,15): copy = ws2.cell(row=i,column=j).value ws1.cell(row=i,column=j,value=copy) wb1.save(import_file_path_02)

環境

Python 3.7 :: Anaconda custom (64-bit)
pandas 1.05
Windows10

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

表の部分をpandasで処理し、残りの部分をopepyxlで処理することは可能です。openpyxlをしっかり勉強してください。

他の方法としては

  1. 全てopenpyxlで処理する。
  2. 表の部分をpandasで処理し、残りの部分の挿入をVBAで処理する。
  3. 全てVBAで処理する。
  4. エクセルの数式だけで実現する。

などがあります。それぞれの方法の中でも複数の実現手段があります。

投稿2021/01/25 22:15

ppaul

総合スコア24666

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Zhiye

2021/01/25 23:27

回答へのアプローチに誤りがないことをご教示頂きありがとうございました。 openpyxlを使いシート内にある文字列を同じシート内でコピー&ペーストするコードを書くことをできますが、異なるファイル内にコピー&ペーストする(今回の場合6行目までを挿入する)コードが書けずに困っています。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問