28.08.2003, 17:48 | #1 |
Участник
|
Использование 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 |
Участник
|
Спасибо всем за активное участие
Во всем разобрался сам, тему закрываю! |
|
01.09.2003, 22:46 | #3 |
Участник
|
Вот если бы вы, Storer, рассказали историю о том, что вы выяснили, народ был бы вам очень благодарен. А самое главное, в следующий раз за решением таких вопросов в следущий раз точно бы обратился к вам.
|
|
04.09.2003, 17:26 | #4 |
Участник
|
Вот моя история про 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 |
Участник
|
Спасибо. Интересная история.
Значит проблема была в том, что вместо одного надо указать два обратных слэша в параметре '\\042'? Я правильно понимаю соль истории? |
|
08.09.2003, 11:40 | #6 |
Участник
|
не совсем... я просто не знал всех параметров метода LoadText(...), теперь знаю
|
|
22.03.2005, 11:57 | #7 |
Участник
|
Цитата:
Storer:
// Экспорт в Excel: excel.export(_fileName, _visible); // _filename – думаю понятно, _visible – показывать рез-т в Excel-е или все сделать вслепую possible solutions? Можно просто тестовый примерчик рабочий выложить на всеобщее осмотрение? Спасибо |
|
22.03.2005, 16:46 | #8 |
Гость
|
Действительно, урок по ускорению excela никому бы не помешал-))
|
|
22.03.2005, 17:48 | #9 |
Участник
|
Кому интересно, тут ссылка с описанием работы с использованием компонент из MSOWC.DLL
http://www.ridder.kz/public/2000_11_offcom/index.htm |
|
22.03.2005, 18:45 | #10 |
Участник
|
ссылка хорошая, только в ней выгрузка данных из текстового файла в Эксель через SpreadSheet - тогда уж проще в xls сразу писать, как в текстовый файл.
А меня интересует маленький примерчик, как вывести одно значение в поле в Эксель. Начало есть. А вот соединение с Экселевским файлом - метод connect - нет. |
|
23.03.2005, 20:34 | #11 |
Участник
|
В строке
Цитата:
excel.export(_fileName, _visible);
curSheet.export(_fileName, _visible); |
|
24.03.2005, 12:22 | #12 |
Участник
|
Спасибо storer.
Только вот вопрос возник другой При вставке в ячейку формулы типа: PHP код:
Как нормально вставить формулу |
|
24.03.2005, 12:45 | #13 |
Administrator
|
Надо вставить английскую версию формулы. Т.е. вместо СУММ написать SUM.
|
|
24.03.2005, 13:08 | #14 |
Участник
|
ВОТ ЭТО ДААА!!
Никогда бы не подумал. Просто Эксель то у меня русский. И другими способами выгрузки в эксель я вставлял как раз =СУММ(). А тут попробовал =SUM(), так он его сам понял и преобразовал в =СУММ() Чудеса. Спасибо большое всем. P.S. Только что обнаружил еще одну проблему. При вставке нескольких столбцов один за другим, возникает странного рода ошибка. Тестирую на ТМЦ. В первую колонку вставляю itemId во вторую ItemName Так вот, если не указан ItemName, к примеру, получается, что ItemId вставляется в объединенный столбец (1 и 2).. Как быть? Прочерки вставлять не хочется вместо пустых значений |
|
24.03.2005, 13:20 | #15 |
Участник
|
Я думаю, что web-компонент SpreadSheet не русифицирован, поэтому не понимает по русски. При последующей загрузке результата в Excel(русский), он сам преобразует данные.
|
|
24.03.2005, 21:27 | #16 |
Участник
|
Провел я маленькое исследование на досуге - по скорости выгрузки в 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 |
Гость
|
А как насчет скороти выгрузки через DDE ?
в исследованиях не участвовало? -))) |
|
25.03.2005, 11:23 | #18 |
Участник
|
нет, к сожалению...
Azat, если сварганите примерчик, буду очень рад протестировать и его. |
|
26.03.2005, 15:08 | #19 |
Участник
|
Новый вопрос::
А как при помощи этого компонента работать с шаблонами Эксель? (Возможно ли создавать файл, в который выгружаются данные, по шаблону?) |
|
26.03.2005, 15:18 | #20 |
Administrator
|
Возможно загружать шаблон в OWC, там править (или туда выводить из кода), затем сохранять в файл. Единственное есть НО - шаблон должен быть в формате XML - т.е. для начала его нужно в Excel сохранить как XML. Возможно что-то при этом теряется, но по крайней мере форматирование - остается. Я не экспериментировал в плане формул - но все линии, шрифты - все остается
|
|
Теги |
spreadsheet |
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|