powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Экспорт таблицы из txt файла в excel используя разделители
4 сообщений из 29, страница 2 из 2
Экспорт таблицы из txt файла в excel используя разделители
    #34908715
Toxamor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
разобрался, нужна была еще одна срока массива, которая определяла filterflags
...
Рейтинг: 0 / 0
Экспорт таблицы из txt файла в excel используя разделители
    #34959125
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)
...
Рейтинг: 0 / 0
Экспорт таблицы из txt файла в excel используя разделители
    #34961242
Toxamor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, поковыряю:)
...
Рейтинг: 0 / 0
Экспорт таблицы из txt файла в excel используя разделители
    #35104711
не нашёл примера кода - но я делал это так.. Сначала выгружал в 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
...
Рейтинг: 0 / 0
4 сообщений из 29, страница 2 из 2
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Экспорт таблицы из txt файла в excel используя разделители
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]