Гость
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Шаблон Excel ... новый файл? / 15 сообщений из 15, страница 1 из 1
16.09.2010, 16:48
    #36850793
YurijAnt
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Шаблон Excel ... новый файл?
Как открыть шаблон .xls, заполнить его и результат записать в новый файл .xls оставив шаблон нетронутым?
...
Рейтинг: 0 / 0
16.09.2010, 16:57
    #36850814
Lion
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Шаблон Excel ... новый файл?
YurijAnt,

Использовть CREATE OBJECT ...
Дальше для созданного объекта использовать методы excel, все что он умеет, открыть файл, заполнить, сохранить под другим именем.
...
Рейтинг: 0 / 0
16.09.2010, 17:02
    #36850828
YurijAnt
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Шаблон Excel ... новый файл?
Делаю так:
PROCEDURE mExcel_I
PARAMETERS mStr, mKol, mFile, sFile
oleApp = createobject("Excel.Application")
oleApp.Workbooks.Open(mFile)
oleItem = oleApp.Workbooks.Item(1)
oleItem.Sheets.Item(1).Columns(7).NumberFormat = "@"
oleItem.Sheets.Item(1).Columns(6).WrapText = .T.
GO TOP
SCAN
oleItem.Sheets.Item(1).Cells(mStr, mKol) .Value = Npp
oleItem.Sheets.Item(1).Cells(mStr, mKol+1).Value = Datev
oleItem.Sheets.Item(1).Cells(mStr, mKol+2).Value = Dtvp
oleItem.Sheets.Item(1).Cells(mStr, mKol+3).Value = Num
oleItem.Sheets.Item(1).Cells(mStr, mKol+4).Value = Wmdtypestr
oleItem.Sheets.Item(1).Cells(mStr, mKol+5).Value = Nazp
oleItem.Sheets.Item(1).Cells(mStr, mKol+6).Value = Ipn
oleItem.Sheets.Item(1).Cells(mStr, mKol+7).Value = Zagsum
oleItem.Sheets.Item(1).Cells(mStr, mKol+8).Value = Vart7
oleItem.Sheets.Item(1).Cells(mStr, mKol+9).Value = Sum8
oleItem.Sheets.Item(1).Cells(mStr, mKol+10).Value = Vart9
oleItem.Sheets.Item(1).Cells(mStr, mKol+11).Value = Sum10
oleItem.Sheets.Item(1).Cells(mStr, mKol+12).Value = Vart11
oleItem.Sheets.Item(1).Cells(mStr, mKol+13).Value = Sum12
oleItem.Sheets.Item(1).Cells(mStr, mKol+14).Value = Vart13
oleItem.Sheets.Item(1).Cells(mStr, mKol+15).Value = Sum14
mStr=mStr+1
ENDSCAN
SUM Zagsum TO oleItem.Sheets.Item(1).Cells(mStr, mKol+7).Value
SUM Vart7 TO oleItem.Sheets.Item(1).Cells(mStr, mKol+8).Value
SUM Sum8 TO oleItem.Sheets.Item(1).Cells(mStr, mKol+9).Value
SUM Vart9 TO oleItem.Sheets.Item(1).Cells(mStr, mKol+10).Value
SUM Sum10 TO oleItem.Sheets.Item(1).Cells(mStr, mKol+11).Value
SUM Vart11 TO oleItem.Sheets.Item(1).Cells(mStr, mKol+12).Value
SUM Sum12 TO oleItem.Sheets.Item(1).Cells(mStr, mKol+13).Value
SUM Vart13 TO oleItem.Sheets.Item(1).Cells(mStr, mKol+14).Value
SUM Sum14 TO oleItem.Sheets.Item(1).Cells(mStr, mKol+15).Value
oleItem.Sheets.Item(1).Rows(mStr).Font.Bold = .T.
cCellValue = oleItem.Sheets.Item(1).Cells(1, 1).Value
oleApp.DisplayAlerts = .F.
oleApp.SaveAs(sFile,1)
oleApp.DisplayAlerts = .T.
oleApp.Quit

nFile-это файл шаблона
sFile-это новый файл
Выдает ошибку!!! Что не так???
...
Рейтинг: 0 / 0
16.09.2010, 17:05
    #36850840
YurijAnt
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Шаблон Excel ... новый файл?
Да и как можно убыстрить процес, а то на больших файлах и заснуть можно?
...
Рейтинг: 0 / 0
16.09.2010, 17:11
    #36850862
Lion
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Шаблон Excel ... новый файл?
YurijAnt,

На какой команде выдает ошибку? Для скорости, заполняю excel на спрятанном excel приложении, затем активирую его для просмотра.
...
Рейтинг: 0 / 0
16.09.2010, 17:22
    #36850898
YurijAnt
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Шаблон Excel ... новый файл?
oleApp.SaveAs(sFile,1) ---- OLE error code 0x80020006:Unknown name.
...
Рейтинг: 0 / 0
16.09.2010, 17:29
    #36850929
rock-n-roll
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Шаблон Excel ... новый файл?
а что такое ,1-? просто
.saveas(name_new_excl) работает
...
Рейтинг: 0 / 0
16.09.2010, 17:29
    #36850931
Lion
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Шаблон Excel ... новый файл?
YurijAnt,

Код: plaintext
1.
oleApp.Workbooks.Open(mFile)
oleApp.SaveAs(sFile, 1 )

Может
oleApp.Workbooks.SaveAs(sFile,1)
...
Рейтинг: 0 / 0
16.09.2010, 18:01
    #36851015
igorbik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Шаблон Excel ... новый файл?
YurijAntКак открыть шаблон .xls, заполнить его и результат записать в новый файл .xls оставив шаблон нетронутым?Я делаю так:
****************************
copy file &shname to &filename1
* копируем шаблон в другой файл
* здесь shname - имя шаблона, filename1 - имя нового файла
* эти имена я задаю до того
* впрочем, реализация может быть и другой
ole1 = GetObject(filename1)
ole2 = ole1.Application
**********************
и далее по накатанной схеме. При этом при зарытии нового файла можно сменить имя.
...
Рейтинг: 0 / 0
16.09.2010, 18:57
    #36851116
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Шаблон Excel ... новый файл?
YurijAntДа и как можно убыстрить процес, а то на больших файлах и заснуть можно?

Код: 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.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
PROCEDURE mExcel_I
PARAMETERS mStr, mKol, mFile, sFile

* Создание и наполнение RecordSet "вручную" по одному значению за раз
* Создание RecordSet 
recordSet = CreateObject('ADODB.Recordset')  
oFields = recordSet.Fields()  

#DEFINE TYPE_INT  3 	&& integer
#DEFINE TYPE_NUM  5 	&& numeric
#DEFINE TYPE_STR  8 	&& character
#DEFINE TYPE_DATE  7   	&& date также возможно значение  133  
#DEFINE TYPE_BOOL  11 	&& logical

oFields.Append("Npp", TYPE_NUM)  && num  
oFields.Append("Datev", TYPE_DATE) && date  
oFields.Append("Dtvp", TYPE_DATE) && date  
oFields.Append("Num", TYPE_NUM)  && num  
oFields.Append("Wmdtypestr", TYPE_STR)  && str
oFields.Append("Nazp", TYPE_STR)  && str
oFields.Append("Ipn", TYPE_NUM)  && num  
oFields.Append("Zagsum", TYPE_NUM)  && num  
oFields.Append("Vart7", TYPE_NUM)  && num  
oFields.Append("Sum8", TYPE_NUM)  && num  
oFields.Append("Vart9", TYPE_NUM)  && num  
oFields.Append("Sum10", TYPE_NUM)  && num  
oFields.Append("Vart11", TYPE_NUM)  && num  
oFields.Append("Sum12", TYPE_NUM)  && num  
oFields.Append("Vart13", TYPE_NUM)  && num  
oFields.Append("Sum14", TYPE_NUM)  && num  

* Открываем RecordSet для наполнения
recordSet.Open()  

Local lnZagsum, lnVart7, lnSum8, lnVart9, lnSum10, lnVart11, lnSum12, lnVart13, lnSum14, LineNum
Store  0  to lnZagsum, lnVart7, lnSum8, lnVart9, lnSum10, lnVart11, lnSum12, lnVart13, lnSum14, LineNum
GO TOP
SCAN 
	* Новая строка
	recordSet.AddNew()	  
	oFields.Item("Npp").value = Npp
	oFields.Item("Datev").value = Datev
	oFields.Item("Dtvp").value = Dtvp
	oFields.Item("Num").value = Num
	oFields.Item("Wmdtypestr").value = Wmdtypestr
	oFields.Item("Nazp").value = Nazp
	oFields.Item("Ipn").value = Ipn
	oFields.Item("Zagsum").value = Zagsum
	oFields.Item("Vart7").value = Vart7
	oFields.Item("Sum8").value = Sum8
	oFields.Item("Vart9").value = Vart9
	oFields.Item("Sum10").value = Sum10
	oFields.Item("Vart11").value = Vart11
	oFields.Item("Sum12").value = Sum12
	oFields.Item("Vart13").value = Vart13
	oFields.Item("Sum14").value = Sum14
	
	lnZagsum = lnZagsum + Zagsum
	lnVart7 = lnVart7 + Vart7
	lnSum8 = lnSum8 + Sum8
	lnVart9 = lnVart9 + Vart9
	lnSum10 = lnSum10 + Sum10
	lnVart11 = lnVart11 + Vart11
	lnSum12 = lnSum12 + Sum12
	lnVart13 = lnVart13 + Vart13
	lnSum14 = lnSum14 + Sum14

	LineNum = LineNum +  1 
ENDSCAN

* Итоговая строка
recordSet.AddNew()	  
oFields.Item("Zagsum").value = Zagsum
oFields.Item("Vart7").value = Vart7
oFields.Item("Sum8").value = Sum8
oFields.Item("Vart9").value = Vart9
oFields.Item("Sum10").value = Sum10
oFields.Item("Vart11").value = Vart11
oFields.Item("Sum12").value = Sum12
oFields.Item("Vart13").value = Vart13
oFields.Item("Sum14").value = Sum14

* Вставка в Excel
oleApp = createobject("Excel.Application")
oleBook = oleApp.Workbooks.Open(mFile)
oleSheet = oleBook.Sheets( 1 )

* Форматировать не обязательно, поскольку тип будет определен по типу поля RecordSet
*oleItem.Sheets.Item( 1 ).Columns( 7 ).NumberFormat = "@"

* Перевод по словам для  6  столбца
oleItem.Sheets.Item( 1 ).Columns( 6 ).WrapText = .T.

* Собственно экспорт в Excel
oleSheet.Cells(mStr, mKol).CopyFromRecordset(recordSet)


* Выделение итоговой строки
oleSheet.Rows(mStr + LineNum).Font.Bold = .T.

* Сохранение
oleApp.DisplayAlerts = .F.
oleBook.SaveAs(sFile, 1 )
oleApp.DisplayAlerts = .T.

* Выход
oleApp.Quit

В принципе, можно ускорить наполнение RecordSet, если подключиться к таблице по ADO примерно так

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
* Внимание! 
* Хинт Exclusive=Off в строке подключения позволит открыть базу в режиме Shared
* чтобы не было конфликта открытия базы данных

loConn = Createobject("Adodb.connection")
m.tcDataSource  = FullPath("data1.dbc")  && Полый путь доступа к файлу базы данных
loConn.ConnectionString = "Provider=VFPOLEDB;Data Source=" + m.tcDataSource+";Exclusive=Off"
loConn.Open()  
lcSelectSQL = "Select Npp, Datev, Dtvp, Num, Wmdtypestr, Nazp, Ipn, Zagsum," + ;
		" Vart7, Sum8, Vart9, Sum10, Vart11, Sum12, Vart13, Sum14" + ;
		" from MyTable"
recordSet = loConn.Execute(lcSelectSQL) 

(...)

* Собственно экспорт в Excel
oleSheet.Cells(mStr, mKol).CopyFromRecordset(recordSet)



Разве что, в последнем случае итоговую строку придется формировать отдельно.
...
Рейтинг: 0 / 0
17.09.2010, 11:19
    #36851822
YurijAnt
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Шаблон Excel ... новый файл?
ВладимирМ огромное спасибо, если подскажите как рамки нарисовать и текст в таблице отцентрировать буду ОЧЕНЬ БЛАГОДАРЕН!!!
...
Рейтинг: 0 / 0
17.09.2010, 11:34
    #36851854
YurijAnt
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Шаблон Excel ... новый файл?
ВладимирМ и ещё в суммирующей строке отражается типо сумма Npp=0, Datev=00.01.00, Dtvp=00.01.00. Как от этого избавиться?
...
Рейтинг: 0 / 0
17.09.2010, 20:05
    #36853149
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Шаблон Excel ... новый файл?
YurijAntкак рамки нарисовать и текст в таблице отцентрировать
Перевод макроса Excel в синтаксис FoxPro

Там и про центрирование и про рамки.

YurijAntВладимирМ и ещё в суммирующей строке отражается типо сумма Npp=0, Datev=00.01.00, Dtvp=00.01.00. Как от этого избавиться?
Необходимо присвоить этим полям в итоговой строке RecordSet значение NULL. А для этого надо сначала разрешить использовать значение NULL в этом поле. Т.е. код немного изменяется таким образом

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
* Создание RecordSet

#DEFINE adFldIsNullable  32 
#DEFINE adFldMayBeNull  64 

oFields.Append("Npp", TYPE_NUM, , adFldIsNullable + adFldMayBeNull)  && num  
oFields.Append("Datev", TYPE_DATE, , adFldIsNullable + adFldMayBeNull) && date  
oFields.Append("Dtvp", TYPE_DATE, , adFldIsNullable + adFldMayBeNull) && date  

Обратите внимание, что дополнительный реквизит - это 4 параметр. Т.е. нужна "лишняя" запятая, чтобы отделить 3 необязательный параметр (размер поля в байтах)

Как правило, этого достаточно. Новая строка уже будет создана со значениями NULL в этих полях и в Excel будет отображена пустая строка. Но если необходимо, после такого указания можно затереть какое-либо значение значением NULL

Код: plaintext
1.
2.
3.
4.
5.
* Итоговая строка
recordSet.AddNew()	  
oFields.Item("Npp").value = null
oFields.Item("Datev").value = null
oFields.Item("Dtvp").value = null
...
Рейтинг: 0 / 0
19.09.2010, 15:11
    #36854161
YurijAnt
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Шаблон Excel ... новый файл?
ВладимирМ ОГРОМНОЕ!!! СПАСИБО!!! ОГРОМНОЕ!!! СПАСИБО!!! ОГРОМНОЕ!!! СПАСИБО!!!
...
Рейтинг: 0 / 0
28.09.2010, 10:53
    #36869380
AleksMed
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Шаблон Excel ... новый файл?
YurijAnt,

и всё таки несколько слов об использовании шаблона.
Используйте именно ШАБЛОН Excelя, т.е. файл с расширением XLT.
Тогда открытие новой книги по шаблону будет командой oleApp.Workbooks.Add(mFile), где mFile - полное имя файла шаблона.
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Шаблон Excel ... новый файл? / 15 сообщений из 15, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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