Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Как из Фокса передать параметры методов Sort и Subtotal ? / 17 сообщений из 17, страница 1 из 1
28.12.2004, 16:45
    #32848287
eds
eds
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как из Фокса передать параметры методов Sort и Subtotal ?
Как из Фокса передать параметры методов Sort и Subtotal ?
...
Рейтинг: 0 / 0
28.12.2004, 16:48
    #32848296
Dik76
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как из Фокса передать параметры методов Sort и Subtotal ?
О чем речь?
...
Рейтинг: 0 / 0
28.12.2004, 16:54
    #32848315
AleksMed
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как из Фокса передать параметры методов Sort и Subtotal ?
Надеюсь речь идет об Excelе :)
Про сортировку не скажу, глянь через макрорекордер Экселя,
думаю там ничего сложного.
А про сабтоталы, так
Subtotal(16, xlSum, @arrTotalColumns,.T.,.F.,.T.), где arrTotalColumns - массив в который записываешь номера столбцов, которые будут обработаны сабтоталом.
...
Рейтинг: 0 / 0
28.12.2004, 16:55
    #32848319
AleksMed
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как из Фокса передать параметры методов Sort и Subtotal ?
Да, первый параметр - это номер столбца по которому будет выполняться группировка.
...
Рейтинг: 0 / 0
28.12.2004, 17:00
    #32848330
eds
eds
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как из Фокса передать параметры методов Sort и Subtotal ?
Да, Господа, действительно речь идет об Excel. Благодарю за пример передачи параметров метода Subtotal, счас попробую, но в литературе было указано, что параметры нужно брать в кавычки.
...
Рейтинг: 0 / 0
28.12.2004, 17:04
    #32848345
AleksMed
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как из Фокса передать параметры методов Sort и Subtotal ?
То литература, а то - жизнь
...
Рейтинг: 0 / 0
28.12.2004, 17:11
    #32848373
eds
eds
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как из Фокса передать параметры методов Sort и Subtotal ?
Полностью с Вами согласен. Есть какой - нибудь пример кода на эту тему ?
Бьюсь долго и передать данные не могу.
...
Рейтинг: 0 / 0
28.12.2004, 17:12
    #32848377
eds
eds
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как из Фокса передать параметры методов Sort и Subtotal ?
Массив @arrTotalColumns необходимо предварительно создать ?
...
Рейтинг: 0 / 0
28.12.2004, 17:26
    #32848418
AleksMed
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как из Фокса передать параметры методов Sort и Subtotal ?
Массив arrTotalColumns надо не только создать, но и заполнить номерами колонок по которым будут подбиваться итоги.
Вышеприведенный пример как раз из жизни
...
Рейтинг: 0 / 0
28.12.2004, 17:33
    #32848436
eds
eds
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как из Фокса передать параметры методов Sort и Subtotal ?
Имею простую таблицу, 1-ы столбец - дата, 2-ой значения сумм. К примеру, необходимо сделать итоги по дням, как будет выглядеть заполнение и @arrTotalColumns - это системная переменная или можно задать любое другое имя массива ? Достаточно будет объявить arrTotalColumns(1)=1 ?
...
Рейтинг: 0 / 0
28.12.2004, 17:39
    #32848451
AleksMed
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как из Фокса передать параметры методов Sort и Subtotal ?
Имя массива - любое, на твое усмотрение. @ в строке Subtotal(...) указывает что массив передается по ссылке.
...
Рейтинг: 0 / 0
28.12.2004, 17:43
    #32848468
eds
eds
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как из Фокса передать параметры методов Sort и Subtotal ?
o=CREATEOBJECT('Excel.Application')
o.Workbooks.Open('c:\Тест.xls')
o.Range("A1:D5").Select
declare arrTotalColumns(1,1)
arrTotalColumns(1,1)=1
o.Selection.Subtotal(1, xlSum, arrTotalColumns(1),.T.,.F.,.T.)

В результате выругался, что не нашел переменную xlSum
...
Рейтинг: 0 / 0
28.12.2004, 19:46
    #32848636
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как из Фокса передать параметры методов Sort и Subtotal ?
xlSum - это не переменная. Это константа Excel.

Чтобы узнать чему она равна, открываешь Excel. Далее Alt+F11. Далее F2

В окне поиска пишешь имя константы xlSum и нажимаешь кнопку с "биноклем".

Будет выведена полная иерархия константы, а в самом низу окна его значение

xlSum = -4157 (&HFFFFEFC3)

Т.е. либо в проге FoxPro вместо xlSum прямо так и пишешь значение -4151, либо делай заголовочный файл для констант

Код: plaintext
1.
2.
#DEFINE xlSum - 4157 
...
o.Selection.Subtotal( 1 , xlSum, arrTotalColumns( 1 ),.T.,.F.,.T.)
...
Рейтинг: 0 / 0
29.12.2004, 11:01
    #32849130
eds
eds
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как из Фокса передать параметры методов Sort и Subtotal ?
Благодарю, Господа !
Насколько я понимаю, такой же принцип и методом PilotTable, но там посложнее в плане формирования объектов Сводной таблицы.
...
Рейтинг: 0 / 0
29.12.2004, 11:07
    #32849146
AleksMed
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как из Фокса передать параметры методов Sort и Subtotal ?
2 EDS

Нет. С PivotTable по другому, если есть желание покопаться, то брошу на мыло кусок кода.
...
Рейтинг: 0 / 0
31.12.2004, 19:14
    #32852667
Igor Korolyov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как из Фокса передать параметры методов Sort и Subtotal ?
Hi EDS

> Насколько я понимаю, такой же принцип и методом PilotTable, но там
> посложнее в плане формирования объектов Сводной таблицы.

См. пример, надеюсь после прочтения хелпа VBA по использованным
свойствам/методам всё станет предельно ясно:

Код: 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.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
SELECT MyCursor
SET SAFETY OFF
COPY TO (m.gcDocumentPath + 'tmpTurnOver.dbf') TYPE FOX2X AS  866 
#INCLUDE XL97Cons.h
LOCAL lnRes, oXl, oSheet, oPivotField, ln1, oField
LOCAL ARRAY laPages[ 8 ]
m.laPages[ 1 ] = 'Счет'
m.laPages[ 2 ] = 'Подразделение'
m.laPages[ 3 ] = 'Центр_учета'
m.laPages[ 4 ] = 'МОЛ'
m.laPages[ 5 ] = 'Группа'
m.laPages[ 6 ] = 'Подкласс'
m.laPages[ 7 ] = 'Класс'
m.laPages[ 8 ] = 'Материал'
LOCAL ARRAY laData[ 2 ]
m.laData[ 1 ] = 'Ед_Изм'
m.laData[ 2 ] = 'Данные'
m.oXl = CreateObject('Excel.Application')
m.oXl.DisplayAlerts = .F.
m.oXl.IgnoreRemoteRequests = .T.
m.oXl.Workbooks.Open(m.gcDocumentPath + 'tmpTurnOver.dbf')
m.oSheet = m.oXl.Sheets( 1 )
m.oSheet.Activate
m.oSheet.Cells( 1 ,  1 ).Value = 'Год'
m.oSheet.Cells( 1 ,  2 ).Value = 'Месяц'
m.oSheet.Cells( 1 ,  3 ).Value = 'Код материала'
m.oSheet.Cells( 1 ,  4 ).Value = 'Материал'
m.oSheet.Cells( 1 ,  5 ).Value = 'Ед_Изм'
m.oSheet.Cells( 1 ,  6 ).Value = 'Класс'
m.oSheet.Cells( 1 ,  7 ).Value = 'Подкласс'
m.oSheet.Cells( 1 ,  8 ).Value = 'Группа'
m.oSheet.Cells( 1 ,  9 ).Value = '# Счета'
m.oSheet.Cells( 1 ,  10 ).Value = 'Счет'
m.oSheet.Cells( 1 ,  11 ).Value = 'Код МОЛа'
m.oSheet.Cells( 1 ,  12 ).Value = 'МОЛ'
m.oSheet.Cells( 1 ,  13 ).Value = 'Центр_учета'
m.oSheet.Cells( 1 ,  14 ).Value = 'Подразделение'
m.oSheet.Cells( 1 ,  15 ).Value = 'Количество на начало'
m.oSheet.Cells( 1 ,  16 ).Value = 'Количество приход'
m.oSheet.Cells( 1 ,  17 ).Value = 'Количество приход (поставщики)'
m.oSheet.Cells( 1 ,  18 ).Value = 'Количество приход (прочее)'
m.oSheet.Cells( 1 ,  19 ).Value = 'Количество расход'
m.oSheet.Cells( 1 ,  20 ).Value = 'Количество расход (производство)'
m.oSheet.Cells( 1 ,  21 ).Value = 'Количество расход (отпуск)'
m.oSheet.Cells( 1 ,  22 ).Value = 'Количество расход (прочее)'
m.oSheet.Cells( 1 ,  23 ).Value = 'Количество на конец'
m.oSheet.Cells( 1 ,  24 ).Value = 'Сумма на начало'
m.oSheet.Cells( 1 ,  25 ).Value = 'Сумма приход'
m.oSheet.Cells( 1 ,  26 ).Value = 'Сумма приход (поставщики)'
m.oSheet.Cells( 1 ,  27 ).Value = 'Сумма приход (прочее)'
m.oSheet.Cells( 1 ,  28 ).Value = 'Сумма расход'
m.oSheet.Cells( 1 ,  29 ).Value = 'Сумма расход (производство)'
m.oSheet.Cells( 1 ,  30 ).Value = 'Сумма расход (отпуск)'
m.oSheet.Cells( 1 ,  31 ).Value = 'Сумма расход (прочее)'
m.oSheet.Cells( 1 ,  32 ).Value = 'Сумма на конец'
m.oSheet.Range("База_данных").AutoFilter
m.oSheet.Range("A1").Select
m.oSheet.Columns( 3 ).Font.Name = 'Courier New Cyr'
m.oSheet.Columns.AutoFit
m.oSheet.Name = 'Оборотка'
m.oXl.Sheets("Оборотка").PivotTableWizard (xlDatabase, "База_данных", "",
"СводнаяТаблица1")
m.oSheet = m.oXl.ActiveSheet
FOR EACH oPivotField IN m.oSheet.PivotTables( 1 ).PivotFields
 IF ASCAN (m.laPages, m.oPivotField.Name,  1 ,  8 ,  0 ,  1  +  2  +  4 ) #  0  OR ;
   ASCAN (m.laData, m.oPivotField.Name,  1 ,  2 ,  0 ,  1  +  2  +  4 ) #  0 
  FOR m.ln1 =  1  TO  12 
   m.oPivotField.SubTotals (m.ln1) = .F.
  ENDFOR
 ENDIF
ENDFOR
m.oSheet.PivotTables( 1 ).AddFields(@m.laData, .Null., @m.laPages)
m.oSheet.PivotTables( 1 ).PivotFields("Количество на начало").Orientation =
xlDataField
m.oSheet.PivotTables( 1 ).PivotFields("Данные").PivotItems( 1 ).Name = 'На
начало'
m.oSheet.PivotTables( 1 ).PivotFields("Количество приход").Orientation =
xlDataField
m.oSheet.PivotTables( 1 ).PivotFields("Данные").PivotItems( 2 ).Name = 'Приход'
m.oSheet.PivotTables( 1 ).PivotFields("Количество приход
(поставщики)").Orientation = xlDataField
m.oSheet.PivotTables( 1 ).PivotFields("Данные").PivotItems( 3 ).Name = 'в т.ч.
от поставщиков'
m.oSheet.PivotTables( 1 ).PivotFields("Количество приход
(прочее)").Orientation = xlDataField
m.oSheet.PivotTables( 1 ).PivotFields("Данные").PivotItems( 4 ).Name = 'Прочий
приход'
m.oSheet.PivotTables( 1 ).PivotFields("Количество расход").Orientation =
xlDataField
m.oSheet.PivotTables( 1 ).PivotFields("Данные").PivotItems( 5 ).Name = 'Расход'
m.oSheet.PivotTables( 1 ).PivotFields("Количество расход
(производство)").Orientation = xlDataField
m.oSheet.PivotTables( 1 ).PivotFields("Данные").PivotItems( 6 ).Name = 'в т.ч.
на производство'
m.oSheet.PivotTables( 1 ).PivotFields("Количество расход
(отпуск)").Orientation = xlDataField
m.oSheet.PivotTables( 1 ).PivotFields("Данные").PivotItems( 7 ).Name = 'Отпуск
на сторону'
m.oSheet.PivotTables( 1 ).PivotFields("Количество расход
(прочее)").Orientation = xlDataField
m.oSheet.PivotTables( 1 ).PivotFields("Данные").PivotItems( 8 ).Name = 'Прочий
расход'
m.oSheet.PivotTables( 1 ).PivotFields("Количество на конец").Orientation =
xlDataField
m.oSheet.PivotTables( 1 ).PivotFields("Данные").PivotItems( 9 ).Name = 'На
конец'
IF ThisForm.chkMoney.Value
 m.oSheet.PivotTables( 1 ).PivotFields("Сумма на начало").Orientation =
xlDataField
 m.oSheet.PivotTables( 1 ).PivotFields("Данные").PivotItems( 10 ).Name = 'На
начало (сумма)'
 m.oSheet.PivotTables( 1 ).PivotFields("Сумма приход").Orientation =
xlDataField
 m.oSheet.PivotTables( 1 ).PivotFields("Данные").PivotItems( 11 ).Name = 'Приход
(сумма) , '
 m.oSheet.PivotTables( 1 ).PivotFields("Сумма приход
(поставщики)").Orientation = xlDataField
 m.oSheet.PivotTables( 1 ).PivotFields("Данные").PivotItems( 12 ).Name = 'От
поставщиков (сумма)'
 m.oSheet.PivotTables( 1 ).PivotFields("Сумма приход (прочее)").Orientation =
xlDataField
 m.oSheet.PivotTables( 1 ).PivotFields("Данные").PivotItems( 13 ).Name = 'Прочий
приход (сумма)'
 m.oSheet.PivotTables( 1 ).PivotFields("Сумма расход").Orientation =
xlDataField
 m.oSheet.PivotTables( 1 ).PivotFields("Данные").PivotItems( 14 ).Name = 'Расход
(сумма)'
 m.oSheet.PivotTables( 1 ).PivotFields("Сумма расход
(производство)").Orientation = xlDataField
 m.oSheet.PivotTables( 1 ).PivotFields("Данные").PivotItems( 15 ).Name = 'На
производство (сумма)'
 m.oSheet.PivotTables( 1 ).PivotFields("Сумма расход (отпуск)").Orientation =
xlDataField
 m.oSheet.PivotTables( 1 ).PivotFields("Данные").PivotItems( 16 ).Name = 'Отпуск
на сторону (сумма)'
 m.oSheet.PivotTables( 1 ).PivotFields("Сумма расход (прочее)").Orientation =
xlDataField
 m.oSheet.PivotTables( 1 ).PivotFields("Данные").PivotItems( 17 ).Name = 'Прочий
расход (сумма)'
 m.oSheet.PivotTables( 1 ).PivotFields("Сумма на конец").Orientation =
xlDataField
 m.oSheet.PivotTables( 1 ).PivotFields("Данные").PivotItems( 18 ).Name = 'На
конец (сумма)'
 m.oSheet.PivotTables( 1 ).PivotFields("Данные").PivotItems( 10 ).Position =  2 
 m.oSheet.PivotTables( 1 ).PivotFields("Данные").PivotItems( 11 ).Position =  4 
 m.oSheet.PivotTables( 1 ).PivotFields("Данные").PivotItems( 12 ).Position =  6 
 m.oSheet.PivotTables( 1 ).PivotFields("Данные").PivotItems( 13 ).Position =  8 
 m.oSheet.PivotTables( 1 ).PivotFields("Данные").PivotItems( 14 ).Position =  10 
 m.oSheet.PivotTables( 1 ).PivotFields("Данные").PivotItems( 15 ).Position =  12 
 m.oSheet.PivotTables( 1 ).PivotFields("Данные").PivotItems( 16 ).Position =  14 
 m.oSheet.PivotTables( 1 ).PivotFields("Данные").PivotItems( 17 ).Position =  16 
ENDIF
m.oSheet.PivotTables( 1 ).PivotFields("Данные").Orientation = xlColumnField
m.oSheet.PivotTables( 1 ).PivotFields("Материал").Orientation = xlRowField
m.oSheet.PivotTables( 1 ).PivotFields("Материал").Position =  1 
FOR EACH oField IN m.oSheet.PivotTables( 1 ).DataFields
 m.oField.Function = xlSum
ENDFOR
m.oSheet.Columns.AutoFit
m.oSheet.Name = 'Свод'
m.oSheet = .Null.
m.oXl.Sheets('Свод').Select
m.oXl.ActiveWorkbook.SaveAs(m.lcFile, xlWorkbookNormal)
m.oXl.IgnoreRemoteRequests = .F.
m.oXl.Quit
m.oXl = .Null.
ERASE (m.gcDocumentPath + 'tmpTurnOver.dbf')
WAIT CLEAR

DECLARE INTEGER ShellExecute;
 IN SHELL32.DLL;
 INTEGER nWinHandle,;
 STRING cOperation,;
 STRING cFileName,;
 STRING cParameters,;
 STRING cDirectory,;
 INTEGER nShowWindow
INKEY ( 0 . 1 )
m.lnRes = ShellExecute( 0 , "Open", m.lcFile, "", m.gcDocumentPath,  1 )
IF m.lnRes <  32 
 DO CASE
 CASE m.lnRes =  2 
  MESSAGEBOX("Неверно установлен Excel",  0 , _SCREEN.Caption)
 CASE m.lnRes =  31 
  MESSAGEBOX("Не установлен Excel",  0 , _SCREEN.Caption)
 CASE m.lnRes =  29 
  MESSAGEBOX("Не удалось запустить Excel",  0 , _SCREEN.Caption)
 CASE m.lnRes =  30 
  MESSAGEBOX("Excel в данный момент недоступен",  0 , _SCREEN.Caption)
 ENDCASE
ENDIF

Да - это рассчитано на русский MS Office - в англицком AFAIK вместо
"База_данных" другое "имя диапазона" используется.
P.S. Надеюсь что файл Excel-евских констант ты уж как-нить сам найдёшь :)

C наступающим!!!

Posted via ActualForum NNTP Server 1.1
...
Рейтинг: 0 / 0
11.01.2005, 16:26
    #32859615
eds
eds
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как из Фокса передать параметры методов Sort и Subtotal ?
Спасибо, Игорь !
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Как из Фокса передать параметры методов Sort и Subtotal ? / 17 сообщений из 17, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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