Сортировка Xls столбика при экспорте

wowa

Well-known member
01.02.2007
845
0
#1
Добрый день.
Помогите отсортировать 3 экселевских столбика при экспорте данных из лотуса в эксель

Вот некоторый мой код:

Код:
Dim xlApp As Variant
Dim xlsheet As Variant
Dim xlwb As Variant
Dim xlrange As Variant
Set xlApp = CreateObject("Excel.Application")
On Error Goto handleXLError
xlApp.Visible = False
Set xlwb=xlApp.Workbooks.Add
Set xlsheet =xlwb.Worksheets(1)
....
Там наверно надо что-то типа
xlSheet.Columns("C:C").Sort

но это не правильно...
Также нужно чтобы все остальные столбики поменялись в соответствии с этой сортировкой
Ну и самая сложная проблема, насколько я понимаю, Нужно чтобы было 3 сортированных столбика
 

alik86

Lotus team
20.11.2008
465
1
#2
А как насчет старого доброго "раскурить и допилить" записанный экселем макрос?
Сходу получилось что-то типа:
Код:
Sub Макрос1()
Columns("A:C").Select
Selection.Sort Key1:=Range("A1"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
Selection.Sort Key1:=Range("A1"), Order1:=xlAscending, Key2:=Range("B1") _
, Order2:=xlAscending, Key3:=Range("C1"), Order3:=xlAscending, Header:= _
xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal, DataOption2:=xlSortNormal, DataOption3:= _
xlSortNormal
End Sub
Не?
 

susinmn

Well-known member
16.10.2007
529
3
#3
xlApp.Rows("n:k").Select
'n и k - номера строк
xlApp.Selection.Sort xlApp.Range("C2"),1, , , , , , 0, 1, False, 1, , 0, ,
C2-начальная ячейка, ну например, если первой строкой идет шапка
 

wowa

Well-known member
01.02.2007
845
0
#4
alik86 , susinmn , макросами я пробовал... ну так и не понял как это внедрить в лотус..
У меня 28 столбиков.
1) В первую очередь должен быть отсортирован 11-ый столбик
2) Во вторую очередь 1 -ый столбик в зависимости от 11 стобика
3) В третью очередь 5-ый столбик в зависимости от всех предыдущих.....

Первая строка - шапка...
 

alik86

Lotus team
20.11.2008
465
1
#5
В экселе запускаем запись макроса, жмем Данные -> Сортировка... указываем что и как сортировать. Изучаем, что получилось.
А в лотус полученный код практически без допилок внедряется путём:
Set xl=CreateObject("Excel.Application")
Set xlWbk=xl.Workbooks.Add
...а дальше вместо всякого рода Columns("A:C").Select в экселе пишем xlWbk.ActiveSheet.Columns("A:C").Select в лотусе.
Как-то так.
 

susinmn

Well-known member
16.10.2007
529
3
#6
В экселе запускаем запись макроса, жмем Данные -> Сортировка... указываем что и как сортировать. Изучаем, что получилось.
А в лотус полученный код практически без допилок внедряется путём:
Set xl=CreateObject("Excel.Application")
Set xlWbk=xl.Workbooks.Add
...а дальше вместо всякого рода Columns("A:C").Select в экселе пишем xlWbk.ActiveSheet.Columns("A:C").Select в лотусе.
Как-то так.
Ему нужно сделать сортировку, аналогичную View, при условии, что нумерация сортированных стобцов, по которым нужна сортировка, идет не слева-направа, как во View, а так как он захочет 11, 1, 5, ...)
wowa так же?
 

wowa

Well-known member
01.02.2007
845
0
#7
susinmn, да , именно так


Добавлено: Вот для теста хочу хотябы отсортировать колонку "E"
Что это мне надо:
xlWbk.ActiveSheet.Columns("1:28").Select
Буден оно так работать или нужно "А:АС(например)"
Далее?

xlApp.Selection.Sort xlApp.Range("E2"),1, , , , , , 0, 1, False, 1, , 0, ,

я прав?
 

nvyush

Lotus team
22.04.2009
2 317
0
#8
Так в чём проблема-то? Экспортируем данные в ексель, а он уж сам отсортирует, как ему укажут. alik86 уже всё разжевал, как сделать.
 

alik86

Lotus team
20.11.2008
465
1
#9
Так:
__________.gif
или это я уже чего-то не догоняю? (пятница :))
P.S. Как вставлять в ответы рисунки в натуральную величину?
 

Вложения

wowa

Well-known member
01.02.2007
845
0
#10
Этот файл должен быть уже отсортирован... Этот файл будут сразу импортировать для разного рода отчетов... И я не хочу допускать, что кто-то забудет сделать сортировку,.. да и зачем пользователям разного уровня гемор... Сделал экспорт, сделал затем импорт... и все.. Чем меньше действий пользователю, тем лучше.
 

nvyush

Lotus team
22.04.2009
2 317
0
#11
Этот файл должен быть уже отсортирован... Этот файл будут сразу импортировать для разного рода отчетов... И я не хочу допускать, что кто-то забудет сделать сортировку,.. да и зачем пользователям разного уровня гемор... Сделал экспорт, сделал затем импорт... и все.. Чем меньше действий пользователю, тем лучше.
1. Экспортируете.
2. Сортируете (кодом, как указал alik86).
3. Сохраняете.
Усё
 

alik86

Lotus team
20.11.2008
465
1
#12
Так программно сортируйте (картинка - это то что Вы проставите во время того как будете забивать макрос для раскурки).
Точно я чего-то не понимаю... :)
 

hosm

* so what *
18.05.2009
2 442
6
#13
так, что ли, надо?
xlApp.Selection.Sort xlApp.Range("K2"),1, xlApp.Range("A2"),1 , xlApp.Range("E2"),1 , 0, 1, False, 1, , 0, ,
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 567
263
#14
у мя есть классы "накрывающие" кусочек АПИ хехеля, кот. выдает CSV файлы, в zip (каждый файл - лист)
и есть сортировка, но не причёсывал зависимости и т.п. потому выложить, пока, не могу
как собирусь...
работает значительно быстрее хехеля
 

hosm

* so what *
18.05.2009
2 442
6
#15
lmike
может, тогда сразу в Кодебейз, а сюда ссылку? Было бы полезно :)
<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">офф по КБ</div></div><div class="sp-body"><div class="sp-content"> и, кстати, надо ли тебе дать права модератора в Кодебейз-Лотус форуме? Виталий вроде на КБ не давал модерство... Будешь успевать проглядывать?
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 567
263
#16
OKEN
к делу ближе - посмотрю
 

wowa

Well-known member
01.02.2007
845
0
#17
Если сортирую один столбик, то все работает правильно:

Код:
xlApp.ActiveSheet.Columns("A:AB").Select 
xlApp.Selection.Sort xlApp.Range("K2"),1, , , , , , 0, 1, False, 1, , 0, ,
Код:
Range("A1:AB137").Sort Key1:=Range("K2"), Order1:=xlAscending, Header:= _
xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
А вот для трех колонок, никак не могу подобрать параметры для лотуса

Код:
Range("A1:AB137").Sort Key1:=Range("K2"), Order1:=xlAscending, Key2:= _
Range("A2"), Order2:=xlAscending, Key3:=Range("E2"), Order3:=xlAscending _
, Header:=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:= _
xlTopToBottom, DataOption1:=xlSortNormal, DataOption2:=xlSortNormal, _
DataOption3:=xlSortNormal
 

wowa

Well-known member
01.02.2007
845
0
#18
Подобрал
Код:
xlApp.Selection.Sort xlApp.Range("K2"),1,xlApp.Range("A2"), ,1 ,xlApp.Range("E2"),1 , 0, 1, False, 1, , 0, ,
 

nvyush

Lotus team
22.04.2009
2 317
0
#19
wowa
Я бы вместо Range("A1:AB137") писал Range(Cells(1, 1), Cells(MaxRow, MaxColumn)), где MaxRow — максимальный номер строки (в данном случае 137), MaxColumn — максимальный номер столбца (28).
 

wowa

Well-known member
01.02.2007
845
0
#20
nvy, этот кусок кода выдала мне запись макроса(или как правильно сказать)...
я сделал так: Columns("A:AB").Select