Автор | Сообщение |
Dima
|
| |
Пост N: 2372
Зарегистрирован: 17.05.05
|
|
Отправлено: 21.05.12 16:52. Заголовок: Снова EXCEL (продолжение)
Ранее с Excel из Harbour ни когда не работал. Поставили тут задачу. У некоторых поставщиков есть определенные формы заказов. Набраны они в Excel. Сейчас народ руками заполняет эти формы и шлет по электронке поставщикам. Задача сводится к тому что бы в этих формах находить нужные коды товара и в нужной ячейке проставлять заказ. Может ткнет кто носом с чего начать что бы не напороться на грабли. Спасибо Сами формы тут http://zalil.ru/33279066
|
|
|
Новых ответов нет
, стр:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
All
[см. все]
|
|
Dima
|
| |
Пост N: 7025
Зарегистрирован: 17.05.05
|
|
Отправлено: 10.03.19 21:57. Заголовок: Vlad04 Можно погугл..
Vlad04 Можно погуглить "чтение файла excel ole" А строки можно сразу посчитать
|
|
|
Pasha
|
| Администратор
|
Пост N: 3827
Зарегистрирован: 23.05.05
|
|
Отправлено: 11.03.19 08:07. Заголовок: Свойство Value относ..
Свойство Value относится к объекту Range. Можно присвоить Range диапазону ячеек внутри строки, и получить Value как массив. Можно получить значения сразу нескольких строк как двумерный массив.
|
|
|
Vlad04
|
| постоянный участник
|
Пост N: 810
Зарегистрирован: 13.10.05
|
|
Отправлено: 11.03.19 15:26. Заголовок: Pasha Попробую пос..
Pasha Попробую построчно считывать. При записи подобным образом скорость кратно возрастает
|
|
|
Haz
|
| |
Пост N: 1441
Зарегистрирован: 20.02.11
|
|
Отправлено: 11.03.19 17:33. Заголовок: Vlad04 пишет: нужно..
Vlad04 пишет: цитата: | нужно прочесть данные с большого Excel файла |
| Если это просто чья то выгрузка в Excel - читать можно через ODBC
|
|
|
Vlad04
|
| постоянный участник
|
Пост N: 811
Зарегистрирован: 13.10.05
|
|
Отправлено: 11.03.19 21:39. Заголовок: Haz Выгрузка чья-то..
Haz Выгрузка чья-то, но формат определённый. Попробовал читать в массив - построчно быстрее,чем по клеточно - а если всю таблицу в массив, так вообще улёт, совсем немного отстает от DBF. Через ODBC, наверно, скорость будет как с родной таблицей ?
|
|
|
Haz
|
| |
Пост N: 1442
Зарегистрирован: 20.02.11
|
|
Отправлено: 11.03.19 23:38. Заголовок: Vlad04 пишет: Через..
Vlad04 пишет: цитата: | Через ODBC, наверно, скорость будет как с родной таблицей ? |
| В принципе не тормозит. Где-то был пример чтения через ODBC, если сам не найдёшь, могу поискать у себя. Точно баловался лет 7 назад, тк была задача чтения и записи больших таблиц Excel.
|
|
|
Vlad04
|
| постоянный участник
|
Пост N: 812
Зарегистрирован: 13.10.05
|
|
Отправлено: 12.03.19 19:20. Заголовок: Небольшой косочек ко..
Небольшой косочек кода решил выложить, так как с некоторыми моментами пришлось повозиться цитата: | ExcelApl - имя объекта Excel при открытии oAS := ExcelApl:ActiveSheet() Количество строк в Excel странице mlast := ExcelApl:ActiveSheet:Range("A1"):CurrentRegion:Rows:Count Копирование в переменную mCel (объявлена, как {}) необходимой области страницы Excel - 3 столбца на всю высоту.В столбцах числовые значения (2) и в одном - Дата. mCel:=oAS:Range('D'+Alltrim(Str(1,5))+':F'+Alltrim(Str(mlast,5))):Value Обработка nn:=2 for i:=2 to mlast // собственно данные со второй строки nWsrst:=(datTek - mCel[i,1] )/365.25 // в итоге число, исходное значение ДАТА nPOL:=Int(mCel[i,2] ) // число nSmk:= Int(mCel[i,3]) // число .... next i |
|
|
|
|
Vlad04
|
| постоянный участник
|
Пост N: 813
Зарегистрирован: 13.10.05
|
|
Отправлено: 12.03.19 19:22. Заголовок: Формат исходного док..
Формат исходного документа csv и xls. Оффис 2003.
|
|
|
Dima
|
| |
Пост N: 7026
Зарегистрирован: 17.05.05
|
|
Отправлено: 12.03.19 23:47. Заголовок: Vlad04 хз я считаю ..
Vlad04 хз я считаю строки и столбцы примерно так a:=oSheet:UsedRange:Rows:Count b:=oSheet:UsedRange:Columns:Count это после oWorkBook := oExcel:Workbooks:Open(cfile) oSheet := oExcel:ActiveSheet()
|
|
|
Haz
|
| |
Пост N: 1443
Зарегистрирован: 20.02.11
|
|
Отправлено: 13.03.19 10:41. Заголовок: Vlad04 Через ODBC, ..
Vlad04 цитата: | Через ODBC, наверно, скорость будет как с родной таблицей |
| Попробуй этим , просто интересно Выгрузки в Excel где первая срока - имена полей а потом сам массив данных читает влет ODBCDemo.prg #require "rddsql" #require "sddodbc" #include "simpleio.ch" #include "dbinfo.ch" REQUEST SDDODBC, SQLMIX REQUEST HB_CODEPAGE_RU1251, HB_CODEPAGE_RU866 PROCEDURE Main() #if defined( __HBSCRIPT__HBSHELL ) rddRegister( "SQLBASE" ) rddRegister( "SQLMIX" ) hb_SDDODBC_Register() #endif Set( _SET_DATEFORMAT, "yyyy-mm-dd" ) HB_SETCODEPAGE( "RU1251" ) rddSetDefault( "SQLMIX" ) ? "Connect:", rddInfo( RDDI_CONNECT, { "ODBC", "Driver={Microsoft Excel Driver (*.xls)};DriverId=790;Dbq=TEST.XLS;" } ) ? "Use:", dbUseArea( .T., , "select * from sheet1", "test" ) ? "Alias:", Alias() ? "DB struct:", hb_ValToExp( dbStruct() ) wait dbGoTop() Browse() dbCloseArea() RETURN Browse там для наглядности, обработку можно сделать в цикле while !eof() ... end, доступ к полям через fieldget( n ) свой XLS переименуй в TEST.XLS и кинь в папку с программой. ВАЖНО ярлычек с данными в EXL должен называться sheet1 или поправь в исходнике под свое название С MiniGui под консоль собирается так c:\MiniGui\batch\compile.bat ODBCDemo /l hbodbc /l odbc32 /l sddodbc /l hbsqldd /c %1 %2 %3 %4 %5 %6 %7 %8 %9
|
|
|
Dima
|
| |
Пост N: 7138
Зарегистрирован: 17.05.05
|
|
Отправлено: 14.11.19 11:59. Заголовок: Pasha пишет: В offi..
|
|
|
|
Pasha
|
| Администратор
|
Пост N: 3896
Зарегистрирован: 23.05.05
|
|
Отправлено: 14.11.19 12:14. Заголовок: Я тоже не нашел обще..
Я тоже не нашел общего ответа, как решить элу проблему. Иногда эксель сходит с ума и начинает чудить. Из последних случаев: Эксель отказывался открывать определенный документ, по каким-то причинам считая его подозрительным Согласился открывать только после того, как я пересохранил документ именно этим экселем Другой случай: win_oleCreateObject("Excel.Application") на одном компьютере стал стабильно выдавать непонятную ошибку и сваливаться. Причем word там же работал без проблем Я уже собрался переустанавливать паршивца, когда заметил, что если Excel уже работает, открыт другой документ, то win_oleCreateObject тоже работает. Иногда не открывает файл из определенной папки, после копирования его в другую начинает открывать. Рекомендации по ссылке я тоже отрабатывал, не помогало Начиная с версии 2010 поганец сам решает, открывать ему файл или нет.
|
|
|
Dima
|
| |
Пост N: 7139
Зарегистрирован: 17.05.05
|
|
Отправлено: 14.11.19 13:52. Заголовок: Pasha пишет: Я тоже..
Pasha пишет: цитата: | Я тоже не нашел общего ответа, как решить элу проблему. |
| Я обнаружил один момент , писал выше. Если с тем же XLS файлом проделывать манипуляции по открытию его не важно из какой папки , минуя копирование по сети то все открывается нормально. Видать какой то атрибут цепляется к файлу после его копирования по сетке........вот его бы обнулить как то..
|
|
|
PSP
|
| постоянный участник
|
Пост N: 1572
Зарегистрирован: 27.01.07
|
|
Отправлено: 14.11.19 15:36. Заголовок: http://winitpro.ru/i..
|
|
|
Dima
|
| |
Пост N: 7140
Зарегистрирован: 17.05.05
|
|
Отправлено: 14.11.19 17:28. Заголовок: PSP Пасиб за ссылку..
PSP Пасиб за ссылку. Что делать с этими атрибутами из Harbour не понятно.. Но посетила мысль , я взял файлик XLS по сети и сложил локально. Далее читаю его содержимое через hb_MemoRead , файлик локально убиваю и после пишу в файл с таким же именем через hb_memowrit По идее от этого атрибута и следа не останется
|
|
|
Haz
|
| |
Пост N: 1502
Зарегистрирован: 20.02.11
|
|
Отправлено: 14.11.19 17:52. Заголовок: Dima пишет: .вот ег..
Dima пишет: цитата: | .вот его бы обнулить как то.. |
| Попробуй так StrFile(FileStr(cFile ), cFile) создастся локальный файл PS Дим не заметил твое последнее с memowrit - по сути одно и тоже написали
|
|
|
Dima
|
| |
Пост N: 7141
Зарегистрирован: 17.05.05
|
|
Отправлено: 14.11.19 17:58. Заголовок: Haz пишет: по сути ..
Haz пишет: цитата: | по сути одно и тоже написали |
| бывает
|
|
|
PSP
|
| постоянный участник
|
Пост N: 1573
Зарегистрирован: 27.01.07
|
|
Отправлено: 14.11.19 19:56. Заголовок: Нормальный способ)) ..
Нормальный способ)) Костыль, конечно, но 100%-ый))
|
|
|
Pasha
|
| Администратор
|
Пост N: 3897
Зарегистрирован: 23.05.05
|
|
Отправлено: 14.11.19 21:45. Заголовок: Вот описание работы ..
Вот описание работы с альтернативными потоками средствами winapi: https://habr.com/ru/post/46990/ Можно сделать обертку этих вызовов на харборе. Насколько я понял, для получения списка потоков файла надо использовать функцию NtQueryInformationFile. А для удаления потока подойдут и обычные файловые функции.
|
|
|
Haz
|
| |
Пост N: 1503
Зарегистрирован: 20.02.11
|
|
Отправлено: 15.11.19 12:12. Заголовок: Dima пишет: его бы..
Dima пишет: Дим все оказалось просто; Ferase( cFile + ":Zone.Identifier") удаляет этот альтернативный поток не трогая сам файл. Более того стандартные файловые функции могут читать и писать в эти потоки.
|
|
|
Новых ответов нет
, стр:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
All
[см. все]
|
|