csv2cdw.py rc2
Nov. 1st, 2008 10:35 amАбсолютно примитивная программа. кому скажи, что писал три недели - не поверят. Тупею. Стремительно и неотвратимо. Не прокатит даже скидка на то, что писал на незнакомом языке и что не нашёл нормальной литературы по ключевым концепциям и идиомам питона (есть в изобилии сниппеты для бегиннеров, чейнджлоги для инсайдеров и документация к модулям). По идее, надо дополнить парочкой проверок, сделать универсальной печать по колонкам и вынести все настройки в начало скритпа с комментариями, но т.к. это всё равно для внутреннего пользования, то мне лень.
Читаем экспортированную экселем муть в CSV (в общем случае непрямоугольную), приводим к прямоугольному виду и передаём компасу v6+ встроенным объектом "таблица":
Читаем экспортированную экселем муть в CSV (в общем случае непрямоугольную), приводим к прямоугольному виду и передаём компасу v6+ встроенным объектом "таблица":
import sys, os
import csv
endl = "\n"
sep = ";"
filename = os.path.abspath(sys.argv[1])
outfile = os.path.abspath(filename+".cdw")
csvr = csv.reader(open(filename), delimiter=sep)
splitlines = []
for splitline in csvr:
splitlines.append(splitline)
maxlen = max(len(splitline) for splitline in splitlines)
height = len(splitlines)
columns = []
for j in range(maxlen):
column = []
for i in range(height):
if splitlines[i]:
#в несуществующие клетки существующего списка записываем пустую строку
cell = splitlines[i][j] if j < len(splitlines[i]) else ""
else:
#в клетки несуществующего список записываем пофиг что
cell = ""
column.append(cell)
columns.append(column)
# // * * * init output to kompas
import Kompas6API5 as KAPI
from win32com.client import Dispatch
import LDefin2D
import LDefin3D
iKompasObject = Dispatch('KOMPAS.Application.5')
iKompasObject = KAPI.KompasObject(iKompasObject)
iKompasObject.Visible = 1
iDocument2D = iKompasObject.Document2D()
iDocumentParam = KAPI.ksDocumentParam(iKompasObject.GetParamStruct(LDefin2D.ko_DocumentParam))
iDocumentParam.Init()
iDocumentParam.type = LDefin2D.lt_DocSheetStandart
iDocument2D.ksCreateDocument(iDocumentParam)
# * * * создание таблицы
iDocument2D.ksTable()
cellh = 10
cellw = 50
# // печатаем по колонке за раз
# // — и только по колонкам, содержащим нужный нам текст
selected = ["last",""]
for j in range(maxlen):
for select in selected:
if select in columns[j]:
for i in range(height):
curox = 0+cellw*j
curoy = 0-cellh*i
iDocument2D.ksLineSeg(curox, curoy, curox+cellw, curoy, 1) #cell bottom
iDocument2D.ksLineSeg(curox, curoy, curox, curoy+cellh, 1) #cell left
iDocument2D.ksLineSeg(curox, curoy+cellh, curox+cellw, curoy+cellh, 1) #cell top
iDocument2D.ksLineSeg(curox+cellw, curoy+cellh, curox+cellw, curoy, 1) #cell right
text = columns[j][i]
iDocument2D.ksText (curox+0.2*cellw, curoy+0.2*cellh, 0, 5, 1, 0, text)
break
Table1 = iDocument2D.ksEndObj()
# * * * окончание таблицы
iDocument2D.ksSaveDocument(outfile)
iDocument2D.ksCloseDocument()
iKompasObject.Quit()
no subject
Date: 2008-11-01 07:53 am (UTC)там есть отличная глава по всей этой хрени, и ссылки где ещё можно посмотреть
no subject
Date: 2008-11-01 09:05 am (UTC)no subject
Date: 2008-11-10 11:50 am (UTC)