Behemoth
Joined: 15 Mar 2002 Posts: 155 Location: Новиков Алексей Юрьевич Occupation: ПБОЮЛ Interests: Пермь
|
Posted: 06 Sep 2007 13:13 Post subject: |
|
|
Добрый день.
Например.
Code: |
#DEFINE nZagCell 1,2
#DEFINE nDateCell 2,1
#DEFINE nControlCol 1
#DEFINE nAdrCol 3
#DEFINE nUslCol 4
#DEFINE nSumCol 10
#DEFINE nLgotCol 12
#DEFINE nPereCol 11
busy(.t.,'Подключение к Excel')
TRY
oApp := CreateObject( "Excel.Application" )
CATCH
Alert("Excel не доступен!")
break
END
busy(.f.)
busy(.t.,'Обработка входного файла')
try
oWorkBook:=oApp:WorkBooks:open(OemToAnsi(cFileName),0)
catch
alert('Ошибка открытия входного файла. Не удалось открыть файл.')
if(valtype(oApp)='O',oApp:quit(),nil)
break
end
try
oWorkSheet:=oWorkBook:worksheets(OemToAnsi('MAIN'))
catch
alert('Ошибка открытия входного файла. Не удалось открыть книгу "MAIN"')
if(valtype(oWorkBook)='O',oWorkBook:close(.f.),nil)
if(valtype(oApp)='O' ,oApp:quit(),nil)
break
end
// Проверка та ли это ведомость
cLine:=AnsiToOEM(oWorkSheet:cells(nZagCell):value)
if !('Ведомость распределения начислений и оплат (по ЖЭУ, домам, услугам, поставщикам с учетом льгот и субсидий)'$cLine)
sayandwait('Открытая книга не соответствует той, для которой выполнена настройка'+cLF+;
'Заголовок должен быть "Ведомость распределения начислений и оплат (по ЖЭУ, домам, услугам, поставщикам с учетом льгот и субсидий)"')
if(valtype(oWorkBook)='O',oWorkBook:close(.f.),nil)
if(valtype(oApp)='O' ,oApp:quit(),nil)
break
endif
// Дата формирования проводок
cLine:=AnsiToOEM(oWorkSheet:cells(nDateCell):value)
dProvDate:=dEndDayOfMon(if('='$cLine,ctod(strtran(substr(cLine,at('=',cLine)+1,10),'.','/')),date()))
if(select('tmpfile')>0,tmpfile->(dbclosearea()),nil)
dbcreate(tempfile(,'dbf'),aTmpStruct,,.t.,'tmpfile')
nLine:=5
do while !('Итого:'$AnsiToOEM(oWorkSheet:cells(nLine,nControlCol):value) ;
.and. !empty(AnsiToOEM(oWorkSheet:cells(nLine,nControlCol):value)) )
nSumma:=oWorkSheet:cells(nLine,nSumCol):value
if(valtype(nSumma)='C', nSumma:=Val(nSumma), nil)
nLgota:=oWorkSheet:cells(nLine,nLgotCol):value
if(valtype(nLgota)='C', nLgota:=Val(nLgota), nil)
nPere :=oWorkSheet:cells(nLine,nPereCol):value
if(valtype(nPere)='C', nPere:=Val(nPere), nil)
dispoutat(0,0,'Строка '+str(nLine,4))
tmpfile->(addrec())
tmpfile->address:=AnsiToOEM(oWorkSheet:cells(nLine,nAdrCol):value)
tmpfile->usluga :=AnsiToOEM(oWorkSheet:cells(nLine,nUslCol):value)
tmpfile->SUMALL :=nSumma
tmpfile->SUMLGOT :=nLgota
tmpfile->SUMPERE :=nPere
tmpfile->(f_dbunlock())
nLine++
enddo
if(valtype(oWorkBook)='O',oWorkBook:close(.f.),nil)
if(valtype(oApp)='O' ,oApp:quit(),nil)
busy(.f.)
if tmpfile->(lastrec())=0
sayandwait('Входной файл не содержит строк данных!')
break
endif
|
_________________ С уважением, Новиков Алексей. |
|