AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 28.08.2003, 17:48   #1  
storer is offline
storer
Участник
 
24 / 11 (1) +
Регистрация: 28.08.2003
Адрес: Москва
? Использование OWC.Spreadsheet для ускорения экспорта/импорта в/из Excel.
Попробовал использовать OWC.Spreadsheet для ускорения экспорта в Excel. Результат классный – ускорение в десятки раз!!! (с 5-6 часов до 15 минут)
А вот с импортом трабл!?
Не могу загрузить файл типа .xls в этот компонент. Пробовал загрузить файл типа .txt с разделителями, но все значения одной строки валятся в ячейку первой колонки.

Использовал код:
….
Com excel = new COM("OWC.Spreadsheet");
excel.loadtext('f:\\...\\asd1.xls');
….

или:
….
Com excel = new COM("OWC.Spreadsheet");
Com range;
Com curSheet = new COM();
;
curSheet = excel.ActiveSheet();
range = curSheet.usedrange();
range.loadtext('f:\\...\\asd1.xls');
….

результат один - грузится несколько неудобочитаемых символов в ячейку A1

Может, кто знает решение?
А то импорт из Excel 30 000 строк занимает несколько часов!?
Старый 01.09.2003, 17:54   #2  
storer is offline
storer
Участник
 
24 / 11 (1) +
Регистрация: 28.08.2003
Адрес: Москва
Thumbs up
Спасибо всем за активное участие
Во всем разобрался сам, тему закрываю!
Старый 01.09.2003, 22:46   #3  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Вот если бы вы, Storer, рассказали историю о том, что вы выяснили, народ был бы вам очень благодарен. А самое главное, в следующий раз за решением таких вопросов в следущий раз точно бы обратился к вам.
Старый 04.09.2003, 17:26   #4  
storer is offline
storer
Участник
 
24 / 11 (1) +
Регистрация: 28.08.2003
Адрес: Москва
Вот моя история про Web компонент Офиса, ускоряющего экспорт-импорт в/из Excel в десятки раз.

.....
COM curSheet;
COM excel = new COM("OWC.Spreadsheet");
COM range;
COM interior;
ComVariant ret;
Str valueCell;
;

curSheet = excel.ActiveSheet();

// Пишем в ячейку:
range = curSheet.range(‘A1’);
range.value(‘Test-test-test’);

// Играем с цветом:
interior = range.interior();
interior.color(‘Green’); // перевод номера цвета в название – отдельная история.

// Рамка, выравнивание, ширина колонки – аналогично )

// Экспорт в Excel:
excel.export(_fileName, _visible); // _filename – думаю понятно, _visible – показывать рез-т в Excel-е или все сделать вслепую.


// Загрузка в curSheet файла типа txt с разделителями типа tab:
excel.LoadText(_fileName,num2char(9),false, '\\042' );
// Параметры: (File As String, [Delimiters As String], [ConsecutiveDelimAsOne As Boolean = False], [TextQualifier As String = "\042"]) – это описание из VBA

// Читаем из ячейки:
ret = range.text();
valueCell = ret.bStr();
.....


Кто хочет больше, копайте dll-ку MSOWC в папке с Офисом

Загрузить другие типы файлов в этот ActivX теоретически можно, а вот практически сходу не получилось, а копаться не было времени…
Старый 04.09.2003, 23:58   #5  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Спасибо. Интересная история.

Значит проблема была в том, что вместо одного надо указать два обратных слэша в параметре '\\042'? Я правильно понимаю соль истории?
Старый 08.09.2003, 11:40   #6  
storer is offline
storer
Участник
 
24 / 11 (1) +
Регистрация: 28.08.2003
Адрес: Москва
не совсем... я просто не знал всех параметров метода LoadText(...), теперь знаю
Старый 22.03.2005, 11:57   #7  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Цитата:
Storer:
// Экспорт в Excel:
excel.export(_fileName, _visible); // _filename – думаю понятно, _visible – показывать рез-т в Excel-е или все сделать вслепую
У меня почему-то на этой строке вываливается. говорит, что у com объекта нет такого метода.

possible solutions?

Можно просто тестовый примерчик рабочий выложить на всеобщее осмотрение?

Спасибо
Старый 22.03.2005, 16:46   #8  
Azat
Гость
 
n/a
Действительно, урок по ускорению excela никому бы не помешал-))
Старый 22.03.2005, 17:48   #9  
xPancho is offline
xPancho
Участник
 
5 / 10 (1) +
Регистрация: 15.10.2003
Адрес: Pushkino
Кому интересно, тут ссылка с описанием работы с использованием компонент из MSOWC.DLL
http://www.ridder.kz/public/2000_11_offcom/index.htm
Старый 22.03.2005, 18:45   #10  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
ссылка хорошая, только в ней выгрузка данных из текстового файла в Эксель через SpreadSheet - тогда уж проще в xls сразу писать, как в текстовый файл.

А меня интересует маленький примерчик, как вывести одно значение в поле в Эксель.

Начало есть. А вот соединение с Экселевским файлом - метод connect - нет.
Старый 23.03.2005, 20:34   #11  
storer is offline
storer
Участник
 
24 / 11 (1) +
Регистрация: 28.08.2003
Адрес: Москва
В строке
Цитата:
excel.export(_fileName, _visible);
нужно :
curSheet.export(_fileName, _visible);
Старый 24.03.2005, 12:22   #12  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Спасибо storer.

Только вот вопрос возник другой
При вставке в ячейку формулы типа:
PHP код:
strLn "=СУММ(A1:A8)";
range.Value(strLn);
//тут же пробовал и range.Formula(strLn); 
он вставляет строку, которую не понимает. (#ИМЯ?)

Как нормально вставить формулу
Старый 24.03.2005, 12:45   #13  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,273 / 3466 (122) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Надо вставить английскую версию формулы. Т.е. вместо СУММ написать SUM.
Старый 24.03.2005, 13:08   #14  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
ВОТ ЭТО ДААА!!
Никогда бы не подумал.
Просто Эксель то у меня русский. И другими способами выгрузки в эксель я вставлял как раз =СУММ(). А тут попробовал =SUM(), так он его сам понял и преобразовал в =СУММ()

Чудеса.

Спасибо большое всем.

P.S. Только что обнаружил еще одну проблему.
При вставке нескольких столбцов один за другим, возникает странного рода ошибка.
Тестирую на ТМЦ.
В первую колонку вставляю itemId
во вторую ItemName
Так вот, если не указан ItemName, к примеру, получается, что ItemId вставляется в объединенный столбец (1 и 2)..

Как быть? Прочерки вставлять не хочется вместо пустых значений
Старый 24.03.2005, 13:20   #15  
storer is offline
storer
Участник
 
24 / 11 (1) +
Регистрация: 28.08.2003
Адрес: Москва
Я думаю, что web-компонент SpreadSheet не русифицирован, поэтому не понимает по русски. При последующей загрузке результата в Excel(русский), он сам преобразует данные.
Старый 24.03.2005, 21:27   #16  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Провел я маленькое исследование на досуге - по скорости выгрузки в Excel.
1. Проверил выгрузку через буфер (сразу все данные в строку, и один раз вставка)
2. Обычный вывод через insertValue
Эти два способа - через ComExcelDocument_RU
3. Вывод через OWC.SpreadSheet

Выводил 1000 записей из InventTable - восемь столбиков. (различные типы - str, int, real, date, формулу(тоже строка ))

Вот результаты (у меня медленный компьютер)
1. 11 сек.
2. около 10 минут!!!
3. 24 сек.

Так что 3 - очень даже хороший способ, учитывая, что это он в каждую ячейку выгружает, то есть метод ComExcelDocument::numToNameCell() сжирает огромную часть из этого времени. И есть возможность работать с интерьером, как и во втором способе.

Так что очень рекомендую всем, кто еще не определился.
Старый 25.03.2005, 10:51   #17  
Azat
Гость
 
n/a
А как насчет скороти выгрузки через DDE ?
в исследованиях не участвовало? -)))
Старый 25.03.2005, 11:23   #18  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
нет, к сожалению...
Azat, если сварганите примерчик, буду очень рад протестировать и его.
Старый 26.03.2005, 15:08   #19  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Новый вопрос::
А как при помощи этого компонента работать с шаблонами Эксель? (Возможно ли создавать файл, в который выгружаются данные, по шаблону?)
Старый 26.03.2005, 15:18   #20  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,273 / 3466 (122) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Возможно загружать шаблон в OWC, там править (или туда выводить из кода), затем сохранять в файл. Единственное есть НО - шаблон должен быть в формате XML - т.е. для начала его нужно в Excel сохранить как XML. Возможно что-то при этом теряется, но по крайней мере форматирование - остается. Я не экспериментировал в плане формул - но все линии, шрифты - все остается
Теги
spreadsheet

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Вспомогательный класс для импорта из Excel через ADO gl00mie DAX: База знаний и проекты 80 10.04.2017 10:55
Исследование скорости экспорта данных из Axapta в Excel (коллективный эксперимент) Gustav DAX: База знаний и проекты 79 13.02.2014 13:18
Экспорт в Excel с помощью OWC.Spreadsheet mmm DAX: Программирование 14 03.10.2006 18:40
Ускорение экспорта в Excel tron DAX: Программирование 14 27.01.2005 09:29
Как выбрать объект для создания шаблона импорта Excel? MagisterLudi DAX: Функционал 2 15.08.2003 16:42
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 21:22.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.