powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Перекидование инфы из таблицы в шаблон Excel.
17 сообщений из 17, страница 1 из 1
Перекидование инфы из таблицы в шаблон Excel.
    #35690847
de_toros
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Создал я наконец то нужную мне программу, точнее не мне, а начальнику. И на последнем этапе проги нужно перекинуть инфу из созданной таблицы (dbf) с данными в Excel-таблицу. В принципе это делается просто командой: copy to *.xls type xls . Но табличка получается "не красивой", всмысле название полей переносятся из dbf-ника, а вот эти вот названия как раз и "не красивые".
Хотелось бы копировать данные из таблицы в уже созданный шаблон (Excel), т.е. в шаблоне находится только "шапка" с "красивыми" названиями столбцов. Ну и соответственно нужный файл сохраняется в отдельном файле. Посмотрел я похожие темы, но конкретного ничего не нашел. В общем как это сделать?
...
Рейтинг: 0 / 0
Перекидование инфы из таблицы в шаблон Excel.
    #35691780
alextashk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
de_toros,

Ручками

COPY TO (lcFile) XL5 AS 1251
USE IN SELECT("balans")

ThisForm.lblEcho1.Caption = "Открытие Excel"
ThisForm.lblEcho1.Refresh
LOCAL XLApp, XLSheet, loRange
XLApp = GETOBJECT('', 'excel.application')
XLApp.VISIBLE= .F.
XLApp.WorkBooks.add(lcFile)
XLApp.ActiveWindow.WINDOWSTATE = 2
XLSheet= XLApp.ActiveSheet
XLSheet.RANGE("A1").Select
XLApp.Selection.EntireColumn.Insert

XLSheet.Range("E2:P" + ALLTRIM(STR(XLSheet.UsedRange.Rows.Count +1))).NumberFormat = "#,##0.00"

ThisForm.lblEcho1.Caption = "Заполнение"
ThisForm.lblEcho1.Refresh
WITH XLSheet
.RANGE("B1").VALUE = "Код"
.RANGE("C1").VALUE = "Книга"
.RANGE("D1").VALUE = "Страница"
.RANGE("E1").VALUE = "Название"
.RANGE("F1").VALUE = "Адрес"
.RANGE("G1").VALUE = "Дебет на начало"
.RANGE("H1").VALUE = "в т.ч. просрочен"
.RANGE("I1").VALUE = "Кредит на начало"
.RANGE("J1").VALUE = "Выставлено"
.RANGE("K1").VALUE = "Предоплата "+CHR(10)+ "этого месяца"
.RANGE("L1").VALUE = "Предоплата "+CHR(10)+ "следующего месяца"
.RANGE("M1").VALUE = "Оплата"
.RANGE("N1").VALUE = "Дебет на конец"
.RANGE("O1").VALUE = "В т.ч. просрочен"
.RANGE("P1").VALUE = "Кредит на конец"

FOR lnPer = 1 TO .UsedRange.Rows.Count - 2
ThisForm.lblEcho2.Caption = STR(lnPer) + " из " + STR(.UsedRange.Rows.Count-1)
ThisForm.lblEcho2.Refresh
.RANGE("A" + ALLTRIM(STR(lnPer + 1))).value = lnPer
lnItog = .RANGE("N" + ALLTRIM(STR(lnPer + 1))).value
IF lnItog > 0 THEN
.RANGE("N" + ALLTRIM(STR(lnPer + 1))).value = lnItog
.RANGE("P" + ALLTRIM(STR(lnPer + 1))).value = 0
ELSE
.RANGE("N" + ALLTRIM(STR(lnPer + 1))).value = 0
.RANGE("P" + ALLTRIM(STR(lnPer + 1))).value = -1*lnItog
ENDIF
IF INKEY() = 27 THEN
EXIT
ENDIF
NEXT
ENDWITH

XLSheet.Range("G" + ALLTRIM(STR(lnPer+1))).FormulaR1C1 = "=SUM(R[-" + ALLTRIM(STR(lnPer))+"]C:R[-1]C)"
XLSheet.Range("H" + ALLTRIM(STR(lnPer+1))).FormulaR1C1 = "=SUM(R[-" + ALLTRIM(STR(lnPer))+"]C:R[-1]C)"
XLSheet.Range("I" + ALLTRIM(STR(lnPer+1))).FormulaR1C1 = "=SUM(R[-" + ALLTRIM(STR(lnPer))+"]C:R[-1]C)"
XLSheet.Range("J" + ALLTRIM(STR(lnPer+1))).FormulaR1C1 = "=SUM(R[-" + ALLTRIM(STR(lnPer))+"]C:R[-1]C)"
XLSheet.Range("K" + ALLTRIM(STR(lnPer+1))).FormulaR1C1 = "=SUM(R[-" + ALLTRIM(STR(lnPer))+"]C:R[-1]C)"
XLSheet.Range("L" + ALLTRIM(STR(lnPer+1))).FormulaR1C1 = "=SUM(R[-" + ALLTRIM(STR(lnPer))+"]C:R[-1]C)"
XLSheet.Range("M" + ALLTRIM(STR(lnPer+1))).FormulaR1C1 = "=SUM(R[-" + ALLTRIM(STR(lnPer))+"]C:R[-1]C)"
XLSheet.Range("N" + ALLTRIM(STR(lnPer+1))).FormulaR1C1 = "=SUM(R[-" + ALLTRIM(STR(lnPer))+"]C:R[-1]C)"
XLSheet.Range("O" + ALLTRIM(STR(lnPer+1))).FormulaR1C1 = "=SUM(R[-" + ALLTRIM(STR(lnPer))+"]C:R[-1]C)"
XLSheet.Range("P" + ALLTRIM(STR(lnPer+1))).FormulaR1C1 = "=SUM(R[-" + ALLTRIM(STR(lnPer))+"]C:R[-1]C)"
XLApp.ActiveWindow.SplitColumn = 2
XLApp.ActiveWindow.SplitRow = 1
XLApp.ActiveWindow.FreezePanes = .T.
XLApp.Cells.Select
XLApp.Selection.Columns.AutoFit
XLApp.Selection.AutoFilter
XLApp.DisplayAlerts = .F.
XLApp.ActiveWorkbook.SaveAs(lcFile, 1)
XLApp.DisplayAlerts = .T.
XLSheet.RANGE("A1").Select

XLApp.VISIBLE= .T.
...
Рейтинг: 0 / 0
Перекидование инфы из таблицы в шаблон Excel.
    #35692032
Nikita_2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну если есть готовый шаблон , за чем столько писанины:
пример:
LOCAL loExcel,lcFileName, lcFullFileName
lcFileName = "shab4.xls"
IF File(m.lcFileName)
lcFullFileName = FullPath(m.lcFileName)
ELSE
MessageBox("Файл шабона "+m.lcFileName+" не найден")
return
ENDIF


loExcel = CREATEOBJECT( 'EXCEL.APPLICATION')
loDoc=m.loExcel.workbooks.Add(m.lcFullFileName)

********Заполнение органзация********************
loDoc.Sheets(1).Range("e53").value=info_org.oblast
loDoc.Sheets(1).Range("i53").value=info_org.raion
loDoc.Sheets(1).Range("m53").value=info_org.podr

loDoc.Sheets(1).Range("e151").value=info_org.oblast
loDoc.Sheets(1).Range("i151").value=info_org.raion
loDoc.Sheets(1).Range("m151").value=info_org.podr

******** Заполнение даты**************
loDoc.Sheets(1).Range("Y34").value=den
loDoc.Sheets(1).Range("Y17").value=da1
loDoc.Sheets(1).Range("Y10").value=ya1

ну и т.д

WAIT CLEAR
m.loExcel.Visible = .T.
...
Рейтинг: 0 / 0
Перекидование инфы из таблицы в шаблон Excel.
    #35692194
Galyamov Rinat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> В общем как это сделать?

Ну первое - это поиск. Вариантов много и многие из них описаны.


А второе, если есть шаблон (в котором уже сделано форматирование), то как -
то так:

select Prikaz_194.for_sort, Prikaz_194.Bold,;

Prikaz_194.n_dog, Prikaz_194.NUM,;

Prikaz_194.naimen,;

Prikaz_194.suma,;

Prikaz_194.Zadanie,;

Prikaz_194.Oplata,;

Prikaz_194.Nedoplata,;

Prikaz_194.sostoyanie,;

padr(trans(NVL((Floor(debitor.Period*10)/10),0.0))+' период',20) as
Deb_Count_period;

from Prikaz_194 left join debitor on
Prikaz_194.N_dog=(transform(debitor.n_plat)+alltrim(debitor.lit));

order by 1;

into cursor Prikaz_194



EXPORT TO (lcOut);

fields n_dog, NUM,;

naimen,;

suma,;

Zadanie,;

Oplata,;

Nedoplata,;

sostoyanie,;

Deb_Count_period;

type XL5



wait window "Идет передача данных в Exel. Ждите ..." nowait noclear

* Экспорт данных в Exel

LOCAL goExcel

goExcel = CREATEOBJECT("Excel.Application")

if vartype(goExcel) # "O"

MessageBox("Excel не найден!!!",0,'Внимание!!!')

return

endif

LOCAL lcShablon, lcNameShablon, lcNameOut

lcShablon=App_VS.GetDefaDir()+'Shablon\Prikaz_194.xls'

if !file(lcShablon)

MessageBox('Не найден файл шаблона. Отчет не будет
оформлен!!!'+chr(13)+'Чтобы избежать этой ситуации в будущем создайте файл
"'+lcShablon+'" и оформите шапку отчета',0,'Внимание!!!')

loShablon=goExcel.WorkBooks.Add()

Else

loShablon=goExcel.WorkBooks.Open(lcShablon)

endif

goExcel.DisplayAlerts = .F.

loOut=goExcel.WorkBooks.Open(lcOut)

loNewDoc=goExcel.WorkBooks.add

loShablon.Sheets(1).Copy(loNewDoc.Sheets(1))

loShablon.Close

&& Удаляем остальные листы нового документа

for i=loNewDoc.Sheets.Count to 2 step -1

loNewDoc.Sheets(i).delete

EndFor

loOut.Sheets(1).Range("A2:I"+Transform(reccount()+1)).Copy

loNewDoc.Sheets(1).Range("A17").PasteSpecial(-4163,-4142,.F.,.F.)



loOut.Close

delete file (lcOut)



&& Добавляем рамку

with loNewDoc.Sheets(1).Range("B16:J"+Transform(reccount()+16))

with .Borders(7) &&xlEdgeLeft

..LineStyle=1

..Weight = 2

..ColorIndex = -4105

EndWith


with .Borders(8) &&xlEdgeTop

..LineStyle=1

..Weight = 2

..ColorIndex = -4105

EndWith


with .Borders(9) &&xlEdgeBottom

..LineStyle=1

..Weight = 2

..ColorIndex = -4105

EndWith

with .Borders(10) &&xlEdgeRight

..LineStyle=1

..Weight = 2

..ColorIndex = -4105

EndWith


with .Borders(11) &&xlInsideVertical

..LineStyle=1

..Weight = 1

..ColorIndex = -4105

EndWith

with .Borders(12)&&xlInsideHorizontal

..LineStyle=1

..Weight = 1

..ColorIndex = -4105

EndWith

EndWith



locate for bold

DO WHILE FOUND( )

loNewDoc.Sheets(1).Range("A"+transform(recno()+16)+":J"+transform(recno()+16)).Font.Bold=.t.

CONTINUE

ENDDO

*loNewDoc.ErrorCheckingOptions.NumberAsText = .F.

*loNewDoc.Save

* Удаляем временный файл *.XLS

wait clear

*loNewDoc.Sheets(1).Activate

goExcel.DisplayAlerts = .T.

goExcel.Visible = .T.

release goExcel

Return


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Перекидование инфы из таблицы в шаблон Excel.
    #35692841
de_toros
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо всем за помощь. Из-за недостатка времени для разбирания кода программы, пока применил вариант от "alextashk". Будет свободное время рассмотрю поподробнее другие.
У меня теперь другая проблема, созданный у себя exe-шник запускаю у себя на компе - все путем! Переношу прогу на другой комп, где она и должна быть установлена - ни фига не работает. Сначала ругалась на MSVCR71.dll. После переброски данной dll, прога ваще перестала реагировать, только сморгнет и тишина. Естественно на этом компе не установлен дистрибутив VFoxPro. Можно ли как-нибудь решить данную проблему без установки VFoxPro?
...
Рейтинг: 0 / 0
Перекидование инфы из таблицы в шаблон Excel.
    #35692868
de_torosСпасибо всем за помощь. Из-за недостатка времени для разбирания кода программы, пока применил вариант от "alextashk". Будет свободное время рассмотрю поподробнее другие.
У меня теперь другая проблема, созданный у себя exe-шник запускаю у себя на компе - все путем! Переношу прогу на другой комп, где она и должна быть установлена - ни фига не работает. Сначала ругалась на MSVCR71.dll. После переброски данной dll, прога ваще перестала реагировать, только сморгнет и тишина. Естественно на этом компе не установлен дистрибутив VFoxPro. Можно ли как-нибудь решить данную проблему без установки VFoxPro?
Можно и нужно. ПрочитавЮ например, Вот это
...
Рейтинг: 0 / 0
Перекидование инфы из таблицы в шаблон Excel.
    #35692877
54321зайчик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сходите на http://forum.foxclub.ru/list.php?29 и изучите пункт 2 "Частозадаваемые вопросы ..." Там есть ответы на все ваши вопросы.
...
Рейтинг: 0 / 0
Перекидование инфы из таблицы в шаблон Excel.
    #35693050
de_toros
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
54321зайчик,
Все почитал, понял что нужно в начале программы поставить команду READ EVENTS. Но после этого, при запуске проги она выдает белый экран и все, никаких действий. В чем загвоздка?
Если что, в моей программе нет не меню, не формы. Пользователь вводит с клавы два числа по команде: get, ну и плюс к этому идет открытие файла через команду: locfile, а дальше идет обработка базы данных с выгрузкой в excel.
...
Рейтинг: 0 / 0
Перекидование инфы из таблицы в шаблон Excel.
    #35693147
de_torosВсе почитал, понял что нужно в начале программы поставить команду READ EVENTS.
Я конечно не зайчик, но осмелюсь уверить, что читали очень плохо. Одни слова "в начале программы" все сразу об этом говорят.
...
Рейтинг: 0 / 0
Перекидование инфы из таблицы в шаблон Excel.
    #35693260
de_toros
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
проходящий.,
Я тогда не понимаю. А где нужно ставить эту команду: READ events? Или я не правильно выразился по поводу слова "программы", ну ладно, тогда будет "главный файл проекта" он же единственннный prg-шник в данном проекте.
...
Рейтинг: 0 / 0
Перекидование инфы из таблицы в шаблон Excel.
    #35693332
de_torosпроходящий.,
Я тогда не понимаю. А где нужно ставить эту команду: READ events? Или я не правильно выразился по поводу слова "программы", ну ладно, тогда будет "главный файл проекта" он же единственннный prg-шник в данном проекте.
Ну вот это уже намного ближе к истине. :)
...
Рейтинг: 0 / 0
Перекидование инфы из таблицы в шаблон Excel.
    #35693359
de_toros
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
проходящий.,
Нахождение истинны это, конечно, хорошо, но вопрос то остался... Чего делать?
...
Рейтинг: 0 / 0
Перекидование инфы из таблицы в шаблон Excel.
    #35693393
de_torosпроходящий.,
Нахождение истинны это, конечно, хорошо, но вопрос то остался... Чего делать?
Для этого надо увидеть этот самый единственный прг. Только желательно перед постингом его сюда воспользоваться пунктом Buetify контекствного меню фокса и местным тэгом SRC.
...
Рейтинг: 0 / 0
Перекидование инфы из таблицы в шаблон Excel.
    #35693428
de_toros
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
проходящий.,
Ок, напишу, только попозже. Сейчас срочно вызывают на объект.
...
Рейтинг: 0 / 0
Перекидование инфы из таблицы в шаблон Excel.
    #35694019
de_toros
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
проходящий.,
Вот примерно половина текста проги:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
Set Dele On
Set Excl Off
Set Safe Off
Set Bell Off
Set Century On
Close All
* ввод значений КТ и КЕ
Clea
KT= 1 
@  7 , 7  Say 'Введите значения:'
@  9 , 10  Say 'Kt='
@  9 , 17    Get  KT
KE= 1 
@  11 , 10  Say 'Ke='
@  11 , 17   Get  KE
Read
* Открытие нужного файла
N=Locfile ('value')
* перекодирование текста
d=Filetostr(N)
d=Cpconvert( 866 , 1251 ,d)
Strtofile(d,'n')
* копирование данных из TXT в ДБФ
Select  1 
Use d:\проба\Fider.Dbf Excl
Zap
Append From 'n' Delimited With Tab
* обрезает пробелы
Replace All uslov With Alltrim(uslov)
* переброс первой части - '30 минут' и удаление пробелов
Replace All Min With Val(Left(uslov,At(' ',uslov)))
Replace All uslov With Substr(uslov,At(' ',uslov))
Replace All uslov With Alltrim(uslov)
* переброс значения всех видов энергий
Replace All energ1 With Val(Left(uslov,At(' ',uslov)))
Replace All uslov With Substr(uslov,At(' ',uslov))
Replace All uslov With Alltrim(uslov)

Replace All energ2 With Val(Left(uslov,At(' ',uslov)))
Replace All uslov With Substr(uslov,At(' ',uslov))
Replace All uslov With Alltrim(uslov)

Replace All energ3 With Val(Left(uslov,At(' ',uslov)))
Replace All uslov With Substr(uslov,At(' ',uslov))
Replace All uslov With Alltrim(uslov)

Replace All energ4 With Val(uslov)
Replace All uslov With 'все'

* чистка базы
Select  3 
Use d:\проба\chasi1.Dbf Excl
Zap
* суммирование и переброс данных в таблицу
Select Fider.Fider, Fider.date_sn, "01:00", Sum(Fider.Min),;
	SUM(Fider.energ1), Sum(Fider.energ2), Sum(Fider.energ3),;
	SUM(Fider.energ4);
	FROM Fider!Fider;
	WHERE  Fider.vremya='00:30' Or Fider.vremya='01:00';
	GROUP By Fider.Fider, Fider.date_sn;
	INTO Table d:\проба\chasi.Dbf
Select  3 
Append From d:\проба\chasi.Dbf
ну и т.д.
...
Рейтинг: 0 / 0
Перекидование инфы из таблицы в шаблон Excel.
    #35694030
de_toros,
И что дальше? Приведенный кусок только и будет "смаргивать".
...
Рейтинг: 0 / 0
Перекидование инфы из таблицы в шаблон Excel.
    #35694122
de_toros
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
проходящий.,
По идее смаргивать эта часть не должна, по крайней мере в начале программы. Там пользователь должен ввести с клавы два значения и выбрать нужный текстовый файл, ну а потом идет сам процесс обработки данных.
На всякий случай выкладываю концовку программы. Есть еще середина проги, но там ни чего интересного, одни SELECT. В общем вот:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
Select  1 
Use d:\проба\общая.Dbf Excl
Zap
Select  2 
Use d:\проба\Chasi1.Dbf
Select Chasi1.Fider, Chasi1.date_sn, Chasi1.exp_3, Chasi1.sum_min,;
	Chasi1.sum_energ1*KT/KE, Chasi1.sum_energ2*KT/KE,;
	Chasi1.sum_energ3*KT/KE, Chasi1.sum_energ4*KT/KE;
	FROM Chasi1;
	ORDER By Chasi1.date_sn, Chasi1.exp_3;
	INTO Table d:\проба\общая.Dbf
*copy to D:\проба\rez.xls type xls


Copy To 'D:\проба\rez.xls' Xl5 As  1251 
Use In Select("balans")

Local XLApp, XLSheet, loRange
XLApp = Getobject('', 'excel.application')
XLApp.Visible= .F.
XLApp.WorkBooks.Add('D:\проба\rez.xls')
XLApp.ActiveWindow.WindowState =  2 
XLSheet= XLApp.ActiveSheet
XLSheet.Range("A1").Select
XLApp.Selection.EntireColumn.Insert

XLSheet.Range("E2:P" + Alltrim(Str(XLSheet.UsedRange.Rows.Count + 1 ))).NumberFormat = "#,##0.00"

With XLSheet
	.Range("A1").Value = "№"
	.Range("B1").Value = "Наименование Фидера"
	.Range("C1").Value = "Дата снятия показаний"
	.Range("D1").Value = "Часовой промежуток времени"
	.Range("E1").Value = "период"
	.Range("F1").Value = "Активная отдача (КВт*ч)"
	.Range("G1").Value = "Активный прием (КВт*ч)"
	.Range("H1").Value = "Реактивная отдача(КВт*ч)"
	.Range("I1").Value = "Реактивный прием (КВт*ч)"

	For lnPer= 1  To .UsedRange.Rows.Count -  2 
		.Range("A" + Alltrim(Str(lnPer +  1 ))).Value = lnPer
		If Inkey() =  27  Then
			Exit
		Endif
	Next
Endwith
XLApp.ActiveWindow.SplitColumn =  2 
XLApp.ActiveWindow.SplitRow =  1 
XLApp.ActiveWindow.FreezePanes = .T.
XLApp.Cells.Select
XLApp.Selection.Columns.AutoFit
XLApp.DisplayAlerts = .F.
XLApp.ActiveWorkbook.SaveAs('D:\проба\rez.xls',  1 )
XLApp.DisplayAlerts = .T.
XLSheet.Range("A1").Select

XLApp.Visible= .T.
Read Events
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Перекидование инфы из таблицы в шаблон Excel.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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