根据CSV文件自动形成表格的MoinMoin插件——InsertCSV

MoinMoin本身的制表语法很简单,但是如果其他软件制作好的表格又重新录入一边,就不合算了。而这些软件大都可以导出CSV格式文件,所以如果能直接上传CSV文件,自动形成表格,将会非常方便省事。
本来想自己写一个这样的插件,结果不小心发现MacroMarket上已经有了,是一个叫ShowCSV宏插件。但是这个有点“土”,我稍微改进了一下,加入了一点背景色功能,使用语法也变了,所以干脆就叫InsertCSV(所有测试都在MoinMoin1.5.8中通过)。


"""
MoinMoin - InsertCSV

This macro is used to insert csv data as wiki table
@license: GNU GPL
"""

Dependencies = ['time'] # do not cache

import os, codecs, csv
from MoinMoin import config, wikiutil
from MoinMoin.action import AttachFile
# from MoinMoin.parser.text_moin_wiki import Parser
from MoinMoin.parser.wiki import Parser

def utf_8_encoder(unicode_csv_data):
for line in unicode_csv_data:
yield line.encode('utf-8')

def execute(macro, args):
request = macro.request
formatter = macro.formatter

if args:
args = args.split(',')
args = [arg.strip() for arg in args]
else:
args = []

argc = len(args)
if argc == 0:
csvfile = 'default.csv'
else:
csvfile = args[0]

if argc > 1:
tcolor = str(args[1])
title_bgcolor = '<%s>' % str(args[1])
else:
tcolor = ""
title_bgcolor = ""

if argc > 2:
ccolor = str(args[2])
content_bgcolor = '<%s>' % str(args[2])
else:
ccolor = ""
content_bgcolor = ""


pagename = formatter.page.page_name
attach_dir = AttachFile.getAttachDir(request, pagename)
files = AttachFile._get_files(request, pagename)

if csvfile in files:
if csvfile.lower().endswith('.csv'):
file_id = codecs.open(os.path.join(attach_dir, csvfile), 'rb', config.charset)
reader = csv.reader(utf_8_encoder(file_id))
index = 0
result = ""
for row in reader:
if index == 0:
result += "||%s '''" % title_bgcolor
result += ("''' ||%s '''" % title_bgcolor).join(row)
result += "''' ||\n"
else:
result += '||%s ' % content_bgcolor
result += ('||%s ' % content_bgcolor).join(row)
result += ' ||\n'
index += 1

result += ' . \n'
result = wikiutil.url_unquote(result)
# result += '[[attachment:%s]]' % file
result += 'attachment:%s' % csvfile

result = wikiutil.escape(result).replace('<%s>' % tcolor, title_bgcolor)
result = result.replace('<%s>' % ccolor, content_bgcolor)
else:
result = 'attachment:%s' % csvfile

p = Parser(result, request)
p.format(request.formatter)

return ""


把上面的代码保存在$WIKI/data/plugin/macro/InsertCSV.py后,重启服务器即可。具体使用宏语法如下:
[[InsertCSV(Projects.csv, #3a88aa, #f2f2f2)]]
第一个参数 Projects.csv 就是你上传的文件;
第二个参数 #3a88aa 表示标题栏的背景色,可以省略;
第三个参数 #f2f2f2 表示内容格的背景色,可以省略。

页面效果如下图(有些敏感内容被我涂抹掉了,呵呵):
[img]/upload/attachment/79712/bb8f5870-e3de-39ca-a174-3b1be572184e.png[/img]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值