Список форумов BOSSForum.RU - Форум. БОСС-Кадровик
Независимый форум, посвященный системе БОСС-Кадровик
и всему, что с ней связано
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 

Быстрый вывод в Excel

 
Начать новую тему   Ответить на тему    Список форумов BOSSForum.RU - Форум. БОСС-Кадровик -> Z-язык
Предыдущая тема :: Следующая тема  
Автор Сообщение
dimachus



Зарегистрирован: 07.10.2011
Сообщения: 108

СообщениеДобавлено: Чт Фев 27, 2020 11:14    Заголовок сообщения: Быстрый вывод в Excel Ответить с цитатой

Добрый день коллеги!
Задался задачей, как на платформе Oracle сделать вывод большого количества данных (заранее наполненного двумерного массива) в Excel.
Хочется не по строчно выводить данные, а загнать в массив и фигануть всё средствами VBA.
Кто-нибудь так делал? Получалось?
Если пробовать так:
Код:

number ir[1][2];

ir[0][0] = 3;
ir[0][1] = 4;

m_Excel.VBScript("Dim TheRange(1,2)");
m_Excel.VBScript("TheRange(0,0) = " + ir[0][0]);
m_Excel.VBScript("TheRange(0,1) = " + ir[0][1]);
m_Excel.VBScript("Range(\"H1:I1\").Value = TheRange");
m_Excel.VBScript("Erase TheRange");

то нигде не ругается.. но ничего и не делает Sad

Код:

m_Excel.VBScript("TheRange(0,0) = 3");
m_Excel.VBScript("Range(\"H1\").Value = TheRange(0,0)");

так тоже ничего...
Поддерживаются ли вообще массивы для передачи в VBA в Z-языке?



P.S. Есть ещё менее красивая, но действующая идея.. вывести запрос с данными на сервер приложений с помощью to_Excel( а потом скопировать на компьютер пользователя.. но тогда очень ограничено получается.

Буду признателен за различные идеи и мысли)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Optimizer



Зарегистрирован: 11.03.2020
Сообщения: 3

СообщениеДобавлено: Ср Мар 11, 2020 10:23    Заголовок сообщения: Ответить с цитатой

Добрый день, коллеги.

Столкнулись с аналогичной проблемой при построении больших отчетов.
На данный момент используем следующие функции поячеячной записи:
Код:
m_Excel_num
m_Excel_str


Но это работает быстро только на маленьких отчетах до пары тысяч строк и небольшого количества столбцов.

Для больших отчетов формирование может длиться часами, что не есть клиентоориентированный подход.
То есть сам запрос формируется за несколько минут и потом 95% времени он выгружается в Excel поячеячно.

Наверняка должен быть способ более быстрого вывода записей, возможно через массив, подобно тому как описал топикстартер, возможно через recordset или каким-то иным образом.

Помогите, пожалуйста!

Спасибо.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
NewAge



Зарегистрирован: 11.06.2010
Сообщения: 108

СообщениеДобавлено: Ср Мар 11, 2020 11:00    Заголовок сообщения: Ответить с цитатой

А чем QueryTables не подходит??? У меня отчет, который ранее выводился более 4 часов, сейчас формируется за 20 минут.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
_Alexander_



Зарегистрирован: 10.03.2020
Сообщения: 3

СообщениеДобавлено: Ср Мар 11, 2020 11:15    Заголовок сообщения: Ответить с цитатой

На платформе MS SQL для передачи результатов запроса в Excel используем OpenQuery. Самый быстрый вариант для выдачи отчета пользователю. Запрос может быть в макросе в xls-файле или вызываться из x-языка. А у Вас, видимо, можно и из z через m_Excel.VBScript(...)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Optimizer



Зарегистрирован: 11.03.2020
Сообщения: 3

СообщениеДобавлено: Ср Мар 11, 2020 17:47    Заголовок сообщения: Ответить с цитатой

NewAge писал(а):
А чем QueryTables не подходит??? У меня отчет, который ранее выводился более 4 часов, сейчас формируется за 20 минут.

Можете прислать пример на Z-языке?
Работает ли он для Web версии БК?
У пользователей нет толстого клиента.

Спасибо.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Optimizer



Зарегистрирован: 11.03.2020
Сообщения: 3

СообщениеДобавлено: Чт Мар 12, 2020 13:31    Заголовок сообщения: Ответить с цитатой

_Alexander_ писал(а):
На платформе MS SQL для передачи результатов запроса в Excel используем OpenQuery. Самый быстрый вариант для выдачи отчета пользователю. Запрос может быть в макросе в xls-файле или вызываться из x-языка. А у Вас, видимо, можно и из z через m_Excel.VBScript(...)

Может быть и можно через m_Excel.VBScript,только к сожалению нигде не нашли документацию и примеры по тому, что и как в нем прописывать.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
_Alexander_



Зарегистрирован: 10.03.2020
Сообщения: 3

СообщениеДобавлено: Чт Мар 12, 2020 16:41    Заголовок сообщения: Ответить с цитатой

Вот пример кода для x-языка SQL-версии.
Предполагается, что Excel-файл уже открыт.
wb = ActiveWorkbook

Код:
vb {

    y = wb.ActiveSheet.Cells(7,4)

    With wb.ActiveSheet.QueryTables.Add("ODBC;DSN=MyBase;DATABASE=MyBase;LANGUAGE=us_english;Trusted_Connection=Yes", wb.Application.Range("A1"))
        .CommandText = "exec dbo.MyBase_holiday_work_report @y=" & y
        .Name = "export_table"
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .BackgroundQuery = False
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .PreserveColumnInfo = True
        .Refresh(BackgroundQuery=False)
    End With

    While wb.ActiveSheet.QueryTables("export_table").Refreshing = True
    Wend

    xlInsideVertical = 11
    xlInsideHorizontal = 12
    xlContinuous = 1
    xlThin = 2
    xlAutomatic = -4105

    With wb.ActiveSheet.QueryTables("export_table").ResultRange.Borders(xlInsideVertical)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
    End With
    With wb.ActiveSheet.QueryTables("export_table").ResultRange.Borders(xlInsideHorizontal)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
    End With

    wb.ActiveSheet.QueryTables("export_table").Delete

    wb.ActiveSheet.Cells(1,1).Select

};
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов BOSSForum.RU - Форум. БОСС-Кадровик -> Z-язык Часовой пояс: GMT + 4
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Pоwerеd by рhpВB © 2001, 2005 рhpВB Grouр
Русская поддержка phрВB
Rambler's Top100 Рейтинг@Mail.ru Список форумов BOSSForum.RU