dervish_candela: (Default)
[personal profile] dervish_candela
Абсолютно примитивная программа. кому скажи, что писал три недели - не поверят. Тупею. Стремительно и неотвратимо. Не прокатит даже скидка на то, что писал на незнакомом языке и что не нашёл нормальной литературы по ключевым концепциям и идиомам питона (есть в изобилии сниппеты для бегиннеров, чейнджлоги для инсайдеров и документация к модулям). По идее, надо дополнить парочкой проверок, сделать универсальной печать по колонкам и вынести все настройки в начало скритпа с комментариями, но т.к. это всё равно для внутреннего пользования, то мне лень.

Читаем экспортированную экселем муть в 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() 

Date: 2008-11-01 07:53 am (UTC)
From: [identity profile] zerglin2000.livejournal.com
По поводу литературы к питону - читай мануал абакуса
там есть отличная глава по всей этой хрени, и ссылки где ещё можно посмотреть

Date: 2008-11-01 09:05 am (UTC)
From: [identity profile] dervish-candela.livejournal.com
пиаришь? тонкий product placement? :D

Date: 2008-11-10 11:50 am (UTC)
From: [identity profile] omega-kun.livejournal.com
Ну или такую ахинею читай ) http://www.python.ru/ http://www.python.org/

April 2017

S M T W T F S
       1
234 5678
9101112131415
16171819202122
23242526272829
30      

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Apr. 6th, 2026 05:07 am
Powered by Dreamwidth Studios