|
|
|
Экспорт таблицы из txt файла в excel используя разделители
|
|||
|---|---|---|---|
|
#18+
разобрался, нужна была еще одна срока массива, которая определяла filterflags ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2007, 19:23 |
|
||
|
Экспорт таблицы из txt файла в excel используя разделители
|
|||
|---|---|---|---|
|
#18+
txt не нужен Это простой и быстрый вариант (фрагмент выдернут из окружения - надо подчистить) Много кода потому что не выгружаются невидимые колонки (права доступа и тп) // Приемлемо для переноса Grid в EXCEL // Перенос наименований и порядка колонок // Проверка видимости колонок String objname,dbname,name,buferror,names[] long colcount,i String s_band,s_x,s_text,head[],ls_report,s_type Long maxi,Headx[],k,row,pos,n boolean acccolumn[] string dwtype,sbuff='',format[],sbuff1 pointer oldpointer oldpointer=SetPointer(HourGlass!) string viz,vizc long cds string tempfile // создание буфера для выгрузки данных datastore ds ds=create datastore //if DataObject='dw_blank' then // для отчетов - блокировка вылета при непр имени // ds.dataobject=dwname //else // ds.dataobject=dataobject //end if string dwSyntax,errmess dwSyntax = Describe("datawindow.syntax") ds.Create (string(dwSyntax) , errmess ) if errmess<>'' then messagebox('Ошибка создания буфера!',errmess) return '' end if // динамическая перегрузка //dsfromlib(ds,ds.dataobject,'') dwtype=Describe("DataWindow.Processing") setwidth() // корректировка ширины "схлопнутых" колонок // Цикл по объектам // Список комментарий колонок из заголовков по совпадению координат pos=1 n=0 ls_report =trim(Describe("DataWindow.Objects") ) //string dwcollist[] // список живых колонок //messagebox('',ls_report) DO WHILE len(ls_report)>0 and pos>0 pos=pos(ls_report,char(9)) if pos=0 then ObjName=trim(ls_report) Else ObjName=left(ls_report,pos - 1) End IF ls_report =trim(mid(ls_report,pos + 1)) s_band=Describe(Objname+'.band') s_x=Describe(Objname+'.x') s_text=Describe(Objname+'.text') s_type=Describe(Objname+'.type') // список объектов заголовка с координатами if s_type='compute' and s_x<>'?' and s_band='header' and (s_text='?' or s_text='!') then // для заголовков в виде compute s_text=Describe("evaluate('"+Objname+"',1)") end if if s_x<>'?' and s_band='header' and s_text<>'!' and s_text<>'?' then n=n+1 Head [n]=s_text Headx[n]=long(s_x) End If LOOP maxi=0 colcount=long(ds.object.datawindow.column.count) if RowsCopy(1,rowcount(),Primary!,ds,999999999,Primary!)=-1 then messagebox('Внимание','Ошибка копирования в буфер!') end if // Цикл по column FOR i = 1 TO colcount objname=ds.describe('#'+trim(string(i))+'.name') acccolumn =false // исключение недоступных колонок из заголовка и данных viz=dwcomp(describe(objname+'.visible')) if left(viz,1)<>'1' then // базовое значение - невидимо (напр по правам доступа) // для расчетной видимости мб случай когда видимость тех или иных колонок включаеся после // формирования отчета в зависимости от нек флагов vizc=trim(mid(viz,3)) if len(vizc)>0 then // есть расчетное значение vizc=Describe('evaluate("'+vizc+",1)") viz=vizc end if if left(viz,1)<>'1' then buferror=ds.Modify("destroy column "+objname) if buferror<>'' then messagebox('Ошибка!',buferror) end if Continue end if end if acccolumn=true s_x =Describe(Objname+'.x') // заголовок из базы if dwtype<>'1' then // не grid грузим из базы name=getcolname(dbname) Else name='??' End if if name='??' then pos=1 s_text='' if dwtype='1' then // grid // имя-комментарий = сумме строк объекта заголовка с такой координатой DO WHILE pos>0 pos=alscan(Headx,long(s_x)) if pos>0 then s_text=s_text+head[pos]+' ' Headx[pos]=-1 End If LOOP End If If s_text<>'' then name=s_text Else //if dwtype='1' then // grid из базы еще не грузили // name=getcolname(dbname) // это лишний тормоз!! //End if if name='??' then name=objname //name='??'+string(maxi) End if End If End if Name=strtran(strtran(strtran(name,char(10),' '),char(13),' '),'"','') names[upperbound(names)+1]=name NEXT cds=long(ds.object.datawindow.column.count) if cds>256 then messagebox('Внимание','Число колонок превышает возможности Excel (>256), ' +string(cds - 256)+ ' колонок справа удаленo!') for i=257 to cds buferror=ds.Modify("destroy column #"+string(i)) if buferror<>'' then messagebox('Ошибка!',buferror) end if next //return '' end if // Сохраняем в файл tempfile=WORK_DIR+"\tmp\"+string(Now(),'ddmmyy')+string(Now(),'hhss')+'.xls' ds.saveas(tempfile,Excel5!,false) // данные maxi=long(ds.object.datawindow.column.count) destroy ds // Загружаем Excel OLEObject ole_1 OLEObject sheet ole_1 = CREATE OLEObject int result result = ole_1.ConnectToNewObject("excel.application") if result<0 then Messagebox('Внимание!','Ошибка соединения с Excel',Stopsign!) Goto EndProg end if ole_1.workbooks.open(tempfile) if not bclose then ole_1.Application.Visible = True end if sheet=ole_1.Application.workbooks(1).worksheets(1) //Заполняем шапку sheet.Rows(1).Insert() //maxi=upperbound(names) OLEObject selection maxi=upperbound(names) for i =1 to maxi sheet.cells[1,i]=names next if bclose then ole_1.Application.Workbooks(1).save() ole_1.Application.quit() end if // EndProg: ole_1.disconnectobject() DESTROY ole_1 DESTROY sheet //filedelete(tempfile) SetPointer(oldpointer) return (tempfile) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2007, 16:54 |
|
||
|
Экспорт таблицы из txt файла в excel используя разделители
|
|||
|---|---|---|---|
|
#18+
Спасибо, поковыряю:) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2007, 14:00 |
|
||
|
Экспорт таблицы из txt файла в excel используя разделители
|
|||
|---|---|---|---|
|
#18+
не нашёл примера кода - но я делал это так.. Сначала выгружал в Txt файл, а потом через OLE открывал Excel без документа.. И через ОЛе писал текст полученный при открытии текстового файла (не нужное выкинуть): Workbooks.OpenText Filename:= _ "C:\Documents and Settings\111\222\333.021", Origin:=866, _ StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _ ConsecutiveDelimiter:=False, Tab:=False, Semicolon:=True, Comma:=False _ , Space:=False, Other:=False, FieldInfo:=Array(Array(1, 1), Array(2, 1), _ Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), Array(7, 1), Array(8, 1), Array(9, 1)), _ TrailingMinusNumbers:=True ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2008, 16:59 |
|
||
|
|

start [/forum/topic.php?fid=15&gotonew=1&tid=1336816]: |
0ms |
get settings: |
10ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
38ms |
get topic data: |
10ms |
get first new msg: |
6ms |
get forum data: |
2ms |
get page messages: |
38ms |
get tp. blocked users: |
1ms |
| others: | 234ms |
| total: | 357ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...