2011年12月16日金曜日

【其の2】pythonでexcelシートをごにょごにょして、trac wikiフォーマットで出力

これの続き

ありがたいことに、前回の投稿後に、
@jun66j5さんからxlsxを扱えるモジュールを教えていただいたので、
さっそく書き換えました。(本当は、xlsxでやりたかった!大変助かりましたー)


  1. excelシートからtrac wikiフォーマットで出力(完了)
  2. 出力した内容をtracにアップデートする(一旦完了)
  3. できればエクセル更新される度に、自動で1、2の処理が実行される(svn or git管理ならフックしていけそう?)
で、教えていただいたモジュールは、openpyxl

コードは以下の通り

====================================================
#!/usr/bin/env python
# - -  coding: utf-8 - -

# xlsxファイルを読み込むモジュール
from openpyxl.reader.excel import load_workbook

# オブジェクトの型を判断するためのモジュール
from types import *


# ファイルを読み込む
wb = load_workbook(filename = r'test.xlsx')

# シートを選択
# wb.get_sheet_by_name(name = "シート名")でも選択可能
# 日本語とか記号とか入ると面倒そうだったので、以下の方法で選択
ws0 = wb.worksheets[0]


for cellid in range(0,100):
    # ws0.cell(A1)といった指定も可能
    # ws0.range('A1:D5')といった指定も可能
    # 今回は、行と列を指定する方法でやってます
    c1 = ws0.cell(row = cellid, column = 1)
    c2 = ws0.cell(row = cellid, column = 4)
    c3 = ws0.cell(row = cellid, column = 6)
    c4 = ws0.cell(row = cellid, column = 7)
    c5 = ws0.cell(row = cellid, column = 8)

    # 値が入っていない場合、encodeしたときに怒られるので
    # NoneTypeの場合に'-'を変わりに入力するためのif文
    val1 = '-' if type(c1.value) is NoneType else c1.value
    val2 = '-' if type(c2.value) is NoneType else c2.value
    val3 = '-' if type(c3.value) is NoneType else c3.value
    val4 = '-' if type(c4.value) is NoneType else c4.value
    val5 = '-' if type(c5.value) is NoneType else c5.value

    # 値をファイルに出力
    out = "||" + val1.encode('utf_8') + "||" + val2.encode('utf_8') + "||" + val3.encode(
'utf_8') + "||" + val4.encode('utf_8') + "||" + val5.encode('utf_8') + "||" + '\n'
    #out = "||" + val1.encode('euc_jp') + "||" + val2.encode('euc_jp') + "||" + val3.enco
de('euc_jp') + "||" + val4.encode('euc_jp') + "||" + val5.encode('euc_jp') + "||" + '\n'
    f = open('test.txt','a')
    f.write(out)
    f.close()

====================================================


2.出力した内容をtracにアップデートする

ここは、やりかたいろいろありそうなんですが、
とりあえず、trac-adminコマンドでさくっと。

trac-admin {Environmentパス} wiki import <page> <file>


これで問題なく更新することができました。

@jun66j5さんからExcel扱うときは、tracwysiwygでWYSIWYGモード中にこぴぺ
という方法もあるとのことなので、時間見つけて試してみたいと思います。

後は、svn更新時のフックに1、2の処理をさせればOKなはずと思います。
なんとか今週中には終わりそう!



0 件のコメント:

コメントを投稿