powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Как из Фокса передать параметры методов Sort и Subtotal ?
17 сообщений из 17, страница 1 из 1
Как из Фокса передать параметры методов Sort и Subtotal ?
    #32848287
eds
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как из Фокса передать параметры методов Sort и Subtotal ?
...
Рейтинг: 0 / 0
Как из Фокса передать параметры методов Sort и Subtotal ?
    #32848296
Dik76
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
О чем речь?
...
Рейтинг: 0 / 0
Как из Фокса передать параметры методов Sort и Subtotal ?
    #32848315
AleksMed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Надеюсь речь идет об Excelе :)
Про сортировку не скажу, глянь через макрорекордер Экселя,
думаю там ничего сложного.
А про сабтоталы, так
Subtotal(16, xlSum, @arrTotalColumns,.T.,.F.,.T.), где arrTotalColumns - массив в который записываешь номера столбцов, которые будут обработаны сабтоталом.
...
Рейтинг: 0 / 0
Как из Фокса передать параметры методов Sort и Subtotal ?
    #32848319
AleksMed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, первый параметр - это номер столбца по которому будет выполняться группировка.
...
Рейтинг: 0 / 0
Как из Фокса передать параметры методов Sort и Subtotal ?
    #32848330
eds
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, Господа, действительно речь идет об Excel. Благодарю за пример передачи параметров метода Subtotal, счас попробую, но в литературе было указано, что параметры нужно брать в кавычки.
...
Рейтинг: 0 / 0
Как из Фокса передать параметры методов Sort и Subtotal ?
    #32848345
AleksMed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
То литература, а то - жизнь
...
Рейтинг: 0 / 0
Как из Фокса передать параметры методов Sort и Subtotal ?
    #32848373
eds
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Полностью с Вами согласен. Есть какой - нибудь пример кода на эту тему ?
Бьюсь долго и передать данные не могу.
...
Рейтинг: 0 / 0
Как из Фокса передать параметры методов Sort и Subtotal ?
    #32848377
eds
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Массив @arrTotalColumns необходимо предварительно создать ?
...
Рейтинг: 0 / 0
Как из Фокса передать параметры методов Sort и Subtotal ?
    #32848418
AleksMed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Массив arrTotalColumns надо не только создать, но и заполнить номерами колонок по которым будут подбиваться итоги.
Вышеприведенный пример как раз из жизни
...
Рейтинг: 0 / 0
Как из Фокса передать параметры методов Sort и Subtotal ?
    #32848436
eds
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имею простую таблицу, 1-ы столбец - дата, 2-ой значения сумм. К примеру, необходимо сделать итоги по дням, как будет выглядеть заполнение и @arrTotalColumns - это системная переменная или можно задать любое другое имя массива ? Достаточно будет объявить arrTotalColumns(1)=1 ?
...
Рейтинг: 0 / 0
Как из Фокса передать параметры методов Sort и Subtotal ?
    #32848451
AleksMed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имя массива - любое, на твое усмотрение. @ в строке Subtotal(...) указывает что массив передается по ссылке.
...
Рейтинг: 0 / 0
Как из Фокса передать параметры методов Sort и Subtotal ?
    #32848468
eds
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Как из Фокса передать параметры методов Sort и Subtotal ?
    #32848636
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Как из Фокса передать параметры методов Sort и Subtotal ?
    #32849130
eds
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Благодарю, Господа !
Насколько я понимаю, такой же принцип и методом PilotTable, но там посложнее в плане формирования объектов Сводной таблицы.
...
Рейтинг: 0 / 0
Как из Фокса передать параметры методов Sort и Subtotal ?
    #32849146
AleksMed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 EDS

Нет. С PivotTable по другому, если есть желание покопаться, то брошу на мыло кусок кода.
...
Рейтинг: 0 / 0
Как из Фокса передать параметры методов Sort и Subtotal ?
    #32852667
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Как из Фокса передать параметры методов Sort и Subtotal ?
    #32859615
eds
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, Игорь !
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Как из Фокса передать параметры методов Sort и Subtotal ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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