search
LoginSignup
5
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

posted at

PythonでGitBucketのIssueをExcel出力する(Excel出力編)

1. はじめに

前回の記事 ではGitBucketのWeb APIを利用してIssueを取得し、Jsonファイルとして保存する方法について説明しました。今回はxlsxwriterというライブラリを利用して、保存したJsonファイルのデータからExcelファイルを出力する方法について説明します。

2. xlsxwriterのインストール

xlsxwriterのインストールはpipで簡単に行うことができます。

pip install xlsxwriter

ソースコードはGitHub に公開されています。
ソースコードからビルドしたい方はリポジトリをcloneした後、python setup.py installコマンドでインストールしてください。

3. ソースコード

excelApps.py
# -*- coding: utf-8 -*-
import os
import json
import xlsxwriter

# report excel file contains json file data
def report_excel_from_json(fileName):
    # oepn and load json file
    # ★ポイント0
    f = open(fileName, 'r')
    jsonData = json.load(f)

    # ★ポイント1
    workbook = xlsxwriter.Workbook(fileName + '.xlsx')
    # ★ポイント2
    worksheet = workbook.add_worksheet('issues')

    rowNum = 0
    # ★ポイント3
    worksheet.write(rowNum, 0, unicode('issue番号', 'utf-8'))
    worksheet.write(rowNum, 1, unicode('ステータス', 'utf-8'))
    worksheet.write(rowNum, 2, unicode('作成日時', 'utf-8'))
    worksheet.write(rowNum, 3, unicode('更新日時', 'utf-8'))
    worksheet.write(rowNum, 4, unicode('URL', 'utf-8'))
    worksheet.write(rowNum, 5, unicode('タイトル', 'utf-8'))
    worksheet.write(rowNum, 6, unicode('本文', 'utf-8'))
    rowNum+=1

    for row in jsonData:
        worksheet.write(rowNum, 0, row['number'])
        worksheet.write(rowNum, 1, row['state'])
        worksheet.write(rowNum, 2, row['created_at'])
        worksheet.write(rowNum, 3, row['updated_at'])
        worksheet.write(rowNum, 4, row['html_url'])
        worksheet.write(rowNum, 5, unicode(row['title'].encode('utf-8'), 'utf-8'))
        worksheet.write(rowNum, 6, unicode(row['body'].encode('utf-8'), 'utf-8'))
        rowNum+=1

    # ★ポイント4
    workbook.close()

if __name__=='__main__':
    fileName = os.getenv("JSON_FILE")
    report_excel_from_json(fileName)

★ポイント0

Excelに設定する入力データを用意します。サンプルではJsonファイルに格納されたデータを利用することにします。
ここは要件に応じて準備してください。

★ポイント1

最初にxlsxwriter.Workbook()でExcelのワークブックのインスタンスを生成します。
引数には作成するExcelファイルのファイル名を指定します。

★ポイント2

次にworkbookのadd_worksheet()でワークシートを作成します。
引数にはシート名を指定します。指定しない場合はSheet1(添え字は1からの連番)のようなシート名で作成されます。
サンプルでは「issues」という名前でシートを作成しました。

★ポイント3

セルにデータを設定するにはworksheetのwrite()を利用します。
文字化け対策としてマルチバイト文字はutf-8としました。

  • 第1引数 : 0から始まる行番号
  • 第2引数 : 0から始まる列番号
  • 第3引数 : 書き込むデータ

なおxlsxwriterにはwrite_datetime()write_url()などのデータ型に応じた専用のメソッドも用意されています。詳細については公式ガイドライン を参照ください。

★ポイント4

最後にworkbookをクローズしてデータをファイルに書き込みます。

4. さいごに

今回はxlsxwriterを利用してPythonでExcelファイルを出力する方法について説明しました。

JavaでExcelファイルを扱う場合はApache POI をよく利用しますが、xlsxwriterの利用方法はApache POIと似たような感じでした。Apache POIを利用したことがある方には使いやすいライブラリかと思います。

今回はxlsxwriterでゼロからExcelファイルを作成しました。Excelで帳票を作成する場合、事前にテンプレートとなるExcelファイルを用意してデータを流し込む使い方もあるかと思います。機会があればテンプレートファイルを利用したExcel帳票の作成についても記事にできればと思います。

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
What you can do with signing up
5
Help us understand the problem. What are the problem?