ありがたいことに、前回の投稿後に、
@jun66j5さんからxlsxを扱えるモジュールを教えていただいたので、
さっそく書き換えました。(本当は、xlsxでやりたかった!大変助かりましたー)
- excelシートからtrac wikiフォーマットで出力(完了)
- 出力した内容をtracにアップデートする(一旦完了)
- できればエクセル更新される度に、自動で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 件のコメント:
コメントを投稿