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

Использовть CREATE OBJECT ...
Дальше для созданного объекта использовать методы excel, все что он умеет, открыть файл, заполнить, сохранить под другим именем.
...
Рейтинг: 0 / 0
Шаблон Excel ... новый файл?
    #36850828
YurijAnt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Делаю так:
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
Шаблон Excel ... новый файл?
    #36850840
YurijAnt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да и как можно убыстрить процес, а то на больших файлах и заснуть можно?
...
Рейтинг: 0 / 0
Шаблон Excel ... новый файл?
    #36850862
Lion
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
YurijAnt,

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

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

Может
oleApp.Workbooks.SaveAs(sFile,1)
...
Рейтинг: 0 / 0
Шаблон Excel ... новый файл?
    #36851015
igorbik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YurijAntКак открыть шаблон .xls, заполнить его и результат записать в новый файл .xls оставив шаблон нетронутым?Я делаю так:
****************************
copy file &shname to &filename1
* копируем шаблон в другой файл
* здесь shname - имя шаблона, filename1 - имя нового файла
* эти имена я задаю до того
* впрочем, реализация может быть и другой
ole1 = GetObject(filename1)
ole2 = ole1.Application
**********************
и далее по накатанной схеме. При этом при зарытии нового файла можно сменить имя.
...
Рейтинг: 0 / 0
Шаблон Excel ... новый файл?
    #36851116
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Шаблон Excel ... новый файл?
    #36851822
YurijAnt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВладимирМ огромное спасибо, если подскажите как рамки нарисовать и текст в таблице отцентрировать буду ОЧЕНЬ БЛАГОДАРЕН!!!
...
Рейтинг: 0 / 0
Шаблон Excel ... новый файл?
    #36851854
YurijAnt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВладимирМ и ещё в суммирующей строке отражается типо сумма Npp=0, Datev=00.01.00, Dtvp=00.01.00. Как от этого избавиться?
...
Рейтинг: 0 / 0
Шаблон Excel ... новый файл?
    #36853149
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Шаблон Excel ... новый файл?
    #36854161
YurijAnt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВладимирМ ОГРОМНОЕ!!! СПАСИБО!!! ОГРОМНОЕ!!! СПАСИБО!!! ОГРОМНОЕ!!! СПАСИБО!!!
...
Рейтинг: 0 / 0
Шаблон Excel ... новый файл?
    #36869380
AleksMed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YurijAnt,

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


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