• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

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

  • Автор темы wowa
  • Дата начала
W

wowa

Добрый день.
Помогите отсортировать 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 сортированных столбика
 
A

alik86

А как насчет старого доброго "раскурить и допилить" записанный экселем макрос?
Сходу получилось что-то типа:
Код:
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
Не?
 
S

susinmn

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

wowa

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

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

alik86

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

susinmn

В экселе запускаем запись макроса, жмем Данные -> Сортировка... указываем что и как сортировать. Изучаем, что получилось.
А в лотус полученный код практически без допилок внедряется путём:
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 так же?
 
W

wowa

susinmn, да , именно так


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

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

я прав?
 
N

nvyush

Так в чём проблема-то? Экспортируем данные в ексель, а он уж сам отсортирует, как ему укажут. alik86 уже всё разжевал, как сделать.
 
A

alik86

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

wowa

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

nvyush

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

alik86

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

hosm

так, что ли, надо?
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
7 940
609
BIT
210
у мя есть классы "накрывающие" кусочек АПИ хехеля, кот. выдает CSV файлы, в zip (каждый файл - лист)
и есть сортировка, но не причёсывал зависимости и т.п. потому выложить, пока, не могу
как собирусь...
работает значительно быстрее хехеля
 
H

hosm

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
7 940
609
BIT
210
OKEN
к делу ближе - посмотрю
 
W

wowa

Если сортирую один столбик, то все работает правильно:

Код:
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
 
W

wowa

Подобрал
Код:
xlApp.Selection.Sort xlApp.Range("K2"),1,xlApp.Range("A2"), ,1 ,xlApp.Range("E2"),1 , 0, 1, False, 1, , 0, ,
 
N

nvyush

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

wowa

nvy, этот кусок кода выдала мне запись макроса(или как правильно сказать)...
я сделал так: Columns("A:AB").Select
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!