時間内の他の統計的なフォームから現代の生活、それはExcelシートに対処することは困難ではない、シートがテーブル内のデータを大量に使いやすいという利点がありますが、時に優れ、我々は(例えば、ID番号など)いくつかのデータをコピーして貼り付ける必要があり私たちは結局、我々はいくつかの退屈な繰り返し動作を行うのに長い時間のために、機械ではないではない、より多くの疲れになります。私たちは数千行を埋めるために、テーブルを持っているシナリオを想像してみて、あなたが名前で対応するID番号を入力する必要がありますが、我々は同様のテーブルを行っている前に、ID番号と同じ人の名前の一部が完了しました、我々は行くの名前、IDカードの番号を見つけるために、一つ一つを渡す必要があり、その後、私たちの現在のテーブルにコピーされます。
私は、これらの操作で日々を繰り返したとき、私はいつも人が、この非人道的な拷問、最終的にはパイソンの思いから私を解放したように、この操作を行うための自動化ツールを持っていると思ったので、私はこの問題の解決に焦点を当てた内部言語のほとんどの詳細のいくつかに焦点を当てることができます。
openpyxl(ラインインストール)やeasy_installをopenpyxlをインストールPIPコマンドをインストールします。
openpyxl動作用い、それぞれ、メモリに既存のブックブックを作成またはロードするために、4つのステップに最初のステップを分割することができます
以下からのインポートload_workbookのopenpyxl からインポートopenpyxlワークブック 前に#ロードワークブック WB1 = load_workbook(「lalala.xlsx」) 「」 " データソースは、ここで我々はopenpyxl READ_ONLYモードを使用することができ、大量のテーブル内の ロード・ソース・テーブルをそうすることの利点は、テーブル全体がメモリにロードされているではありません 「"」 WB1 = load_workbook(ファイル名=『lalala.xlsx』、READ_ONLY = TRUE) #ワークブックを作成 )(WB2 =ワークブックを
第二工程は、シートにアクティブシートのデフォルトワークブック名で作成されたExcelテーブルシート、ブック()を動作させる、Pythonのインタラクティブコマンドラインによって確認することができます。
#アクセスアクティビティシート WS = wb.active #セットのシートの見出しは、 「範囲名は」= ws.title Piは、シートのタイトルで作成する# WS = wb.create_sheet(タイトル=「パイ」) #は、表題紙シート1を取得します WS = WB [ 'Sheet1の']
第3のステップは、細胞内の作動シートです。セルの位置は、このような細胞としてラインと列にそれによって決定され、それが列Aにあり、3行目に、WS [「A3」]を介してアクセスすることができることに留意すべきです。図に示すように、さらにcell.columnデータ型のセル列の属性、cell.rowでカラムを有します。
READ_ONLYモードでワークブックをロードするときに特別な注意は、cell.columnとcell.rowはint型のオブジェクトです。最初の列は、ワークブック大文字の列数の代表は、「A」のように、真でない場合cell.columnセルはオフセット列の数から記録されています。
#最初の行、データ型tuplerow = WSを取得[1]#列、データ型tuplecolumn = WS [ 'A']取得 #1 F5のWSの設定値[ 'F5を'] = ' SFS'位セルを設定値WS [「F5」]値 =「こんにちは」# 行のセル数M = WS [「F5」]を得る 。行番号列のセルはn = WS [「F5」]の数を取得する 。カラム番号は、特定の領域を得ますそのようなF5からF30までなどの値、データ型tuplek = WS [ 'F5': 'F30']# 、そのようなF5からG30のように、データ型を特定の領域の値を取得tuplej = WS [ 'F5': 'G30' ]#は、シートの最大行数ROW_COUNT = ws.max_row#シートを得最大列数COLUMN_COUNT = ws.max_column取得し
、他のソフトウェアで使用すると、テーブル(Microsoft OfficeまたはWPS)を保存したい場合は、ここで注意することは、変更を保存する最後のステップをあなたが開いたときに、文句を言うでしょう操作を保存
wb1.save( 'empty_book.xlsx') wb2.save(ファイル名= 'other_book.xlsx')
実装要件
Get_info_from_excel.pyは、お好みのテキストエディタで編集するための新しいファイルを作成し、あなたが最初openpyxlライブラリload_workbookモジュールを導入する必要があります。あなたは既に存在してload_workbookロードExcelの表を使用することができます。
openpyxl輸入load_workbookから
私たちの目的は、ターゲットExcelの表にシートおよびバルク・コピーをエクセル、我々は最初のいくつかの変数を定義するソースから情報を抽出することです。
#ソーステーブル名 source_file_name =「lalala.xlsx」 #オブジェクトテーブル名 target_file_name =「lelele.xlsx」 抽出する#ソーステーブル情報シート source_sheet_name =「シート2」 #先テーブル一括コピー用紙情報に target_sheet_name =「シート2 「 #ヘッダー行は、行のソーステーブルに source_header_row。3 = 対象テーブルヘッダ行位行 = 2 target_header_row データのどの列に応じた情報を抽出するために#のソーステーブルを、ソーステーブルヘッダ行 source_cell_condition =」name 'の #行見出しターゲット表によると、それによれば、宛先表の列のデータ情報をコピーする target_cell_condition =「名前」 の情報を抽出するために#のソース表の列を source_cell_filled =「ID番号」 あなたは情報のコピーしたい#ターゲット表の列 =「アイデンティティをtarget_cell_fillingを「いいえ。
次のステップ2つのテーブルを容易にするために、メモリに先テーブルとソーステーブル。
ここで我々はREAD_ONLYモードのロード・ソース・テーブルのopenpyxlを使用することができたときに#データソーステーブルの大規模な量が、そうすることの利点は、テーブル全体がメモリにロードされているではありません 。#wb_w = load_workbook(source_file_name) = wb_r = load_workbook(ファイル名source_file_name、READ_ONLY =真) wb_w = load_workbook(target_file_name)
タイトルを取得する宛先表を持つソーステーブル内の行のタイトル番号とシート名から行が既に定義されています。
ws_r = wb_r [source_sheet_name] ws_w = wb_w [target_sheet_name] header_row_r = ws_r [source_header_row] header_row_w = ws_w [target_header_row]
ソースのオペレーティング・テーブルのヘッダー行、我々は情報を取得したいです:
「」 " openpyxlがREAD_ONLYワークブックモードを搭載した場合には、取得セルは、通常のセルでない 列にオフセットテストcell.column整数なので、ここでは、プロセスに関数を定義する Excelに整数に変換します実際のそのような"A"と列の数、 "BB"ら "" " DEF readOnly_offsetColunmNumber_toRealColumn(数): カラム= '' 数は<= 26である場合: カラム= CHR(数+ ORD( 'A') - 1。) 他: 数値1 = //番号26である COLUMN1 = CHR(数値1 ORD +( 'A') - 1) 数値2の%=番号26である -列2 = CHR(1 ORD +( 'A')数値2) 列COLUMN1 + =列2 戻り列 # 2つの変数を初期化し、条件がテーブルのソース列、列コピーするある source_condition_columnを=「」 source_filled_column =「」 「」 " カラムのカラム位置の位置及び状態を取得するために、ソーステーブルのサイクルのヘッダー行をコピーする、 次に条件が行の周期的に埋め込まれた最大数によって得られます ""」 header_row_rのセルのために: :cell.value == source_cell_condition場合 source_condition_column = readOnly_offsetColunmNumber_toRealColumn(cell.column) ELIFのcell.valueは== source_cell_filled: source_filled_column = readOnly_offsetColunmNumber_toRealColumn(cell.column)
操作対象テーブルのヘッダー行は、我々は情報を取得したいです:
#二つの変数、すなわち、ターゲットテーブルの条件は、カラム、カラムを貼り付けるtarget_condition_column =「」target_filling_column =「」初期化 「」 " タイトルバーループ対象テーブルを、列と列の位置を取得するための条件は、貼り付けする ことにより、次いでネストされた行の最大数は、条件欄取得するループ header_row_wでcell_jのための""」:cell_j.value == target_cell_condition IF target_condition_column = cell_j.column のelif cell_j.value == target_cell_filling: target_filling_column = cell_j.column
今、私たちは、すべての必要な情報、データを貼り付けるための実際の時間を持っています。
「」 " 条件付きループターゲット表の列、ネストされたループ・ソース表の列、セルの条件内の条件ターゲット表の列に一度 ソース表の列の条件付きセルの値と同じ、私たちは、ソース表の列をコピーしたいと思います同じ行の値におけるセル テーブルの同じ行のセル貼り付けるターゲット列を与える。 「」" cell_mためws_wにおける[target_condition_column + STR(+ target_header_row 1):target_condition_column + STR(ws_w.max_row)]: cell_Nためws_rで[ + STR source_condition_column(+ source_header_row 1):source_condition_column + STR(ws_r.max_row)]: IF cell_m [0] == cell_N .Valueの[0] .Valueの: ws_w [target_filling_column + STR(cell_m [0] .Row)]。値= ws_r [source_filled_column + STR( cell_n [0] .row)]値
最後に、その上にターゲットブックを保存します。
wb_w.save(target_file_name)
この記事はで再現されhttps://www.py.cn/toutiao/11131.html