On-line: Haz, Мирослав, гостей 0. Всего: 2 [подробнее..]
АвторСообщение
Dima
администратор




Пост N: 2372
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 21.05.12 16:52. Заголовок: Снова EXCEL (продолжение)


Ранее с Excel из Harbour ни когда не работал.
Поставили тут задачу.
У некоторых поставщиков есть определенные формы заказов.
Набраны они в Excel. Сейчас народ руками заполняет эти формы
и шлет по электронке поставщикам.
Задача сводится к тому что бы в этих формах находить
нужные коды товара и в нужной ячейке проставлять заказ.
Может ткнет кто носом с чего начать что бы не напороться на грабли.
Спасибо
Сами формы тут http://zalil.ru/33279066

Спасибо: 0 
Профиль
Ответов - 300 , стр: 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"

А строки можно сразу посчитать

Спасибо: 0 
Профиль
Pasha
Администратор




Пост N: 3827
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 11.03.19 08:07. Заголовок: Свойство Value относ..


Свойство Value относится к объекту Range. Можно присвоить Range диапазону ячеек внутри строки, и получить Value как массив.
Можно получить значения сразу нескольких строк как двумерный массив.

Спасибо: 0 
Профиль
Vlad04
постоянный участник


Пост N: 810
Зарегистрирован: 13.10.05
ссылка на сообщение  Отправлено: 11.03.19 15:26. Заголовок: Pasha Попробую пос..


Pasha

Попробую построчно считывать. При записи подобным образом скорость кратно возрастает

Спасибо: 0 
Профиль
Haz
администратор




Пост N: 1441
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 11.03.19 17:33. Заголовок: Vlad04 пишет: нужно..


Vlad04 пишет:

 цитата:
нужно прочесть данные с большого Excel файла


Если это просто чья то выгрузка в Excel - читать можно через ODBC

Спасибо: 0 
Профиль
Vlad04
постоянный участник


Пост N: 811
Зарегистрирован: 13.10.05
ссылка на сообщение  Отправлено: 11.03.19 21:39. Заголовок: Haz Выгрузка чья-то..


Haz
Выгрузка чья-то, но формат определённый.
Попробовал читать в массив
- построчно быстрее,чем по клеточно
- а если всю таблицу в массив, так вообще улёт, совсем немного отстает от DBF.

Через ODBC, наверно, скорость будет как с родной таблицей ?

Спасибо: 0 
Профиль
Haz
администратор




Пост N: 1442
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 11.03.19 23:38. Заголовок: Vlad04 пишет: Через..


Vlad04 пишет:

 цитата:
Через ODBC, наверно, скорость будет как с родной таблицей ?


В принципе не тормозит. Где-то был пример чтения через ODBC, если сам не найдёшь, могу поискать у себя. Точно баловался лет 7 назад, тк была задача чтения и записи больших таблиц Excel.

Спасибо: 0 
Профиль
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



Спасибо: 0 
Профиль
Vlad04
постоянный участник


Пост N: 813
Зарегистрирован: 13.10.05
ссылка на сообщение  Отправлено: 12.03.19 19:22. Заголовок: Формат исходного док..


Формат исходного документа csv и xls. Оффис 2003.

Спасибо: 0 
Профиль
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()

Спасибо: 0 
Профиль
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

Спасибо: 0 
Профиль
Dima
администратор




Пост N: 7138
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 14.11.19 11:59. Заголовок: Pasha пишет: В offi..


Pasha пишет:

 цитата:
В office 2013 и office 2010 с последними обновлениями появилась новая неприятная хворь:
При открытии документа методом Excel:Workbooks:Open происходит или ошибка открытия, или зависание при выполнении метода.
Хворь проявляется у Excel, и иногда у Word.
У меня шаблоны документов хранятся на letodb сервере. Перед открытием я их копирую в папку temp из getenv('temp').


Делаю точно так же и в 2003 работает норм.
В 2010 падаем при открытии.
Сделал пару тестов с тем же файлом Excel минуя копирование по сети , проблемы нет.
Курил тему https://answers.microsoft.com/ru-ru/office/forum/office_2010-excel/%D0%B7%D0%B0%D1%89%D0%B8%D1%89%D0%B5%D0%BD%D0%BD/d2647c06-cb06-4a3c-a1db-2821e8a0d561
не помогло
Курил так же Meтод Open http://www.taurion.ru/excel/pril1/7 и решения не увидел
Что делать я хз

Спасибо: 0 
Профиль
Pasha
Администратор




Пост N: 3896
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 14.11.19 12:14. Заголовок: Я тоже не нашел обще..


Я тоже не нашел общего ответа, как решить элу проблему.
Иногда эксель сходит с ума и начинает чудить. Из последних случаев:

Эксель отказывался открывать определенный документ, по каким-то причинам считая его подозрительным
Согласился открывать только после того, как я пересохранил документ именно этим экселем

Другой случай: win_oleCreateObject("Excel.Application") на одном компьютере стал стабильно выдавать непонятную ошибку и сваливаться. Причем word там же работал без проблем
Я уже собрался переустанавливать паршивца, когда заметил, что если Excel уже работает, открыт другой документ, то win_oleCreateObject тоже работает.

Иногда не открывает файл из определенной папки, после копирования его в другую начинает открывать.

Рекомендации по ссылке я тоже отрабатывал, не помогало

Начиная с версии 2010 поганец сам решает, открывать ему файл или нет.

Спасибо: 0 
Профиль
Dima
администратор




Пост N: 7139
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 14.11.19 13:52. Заголовок: Pasha пишет: Я тоже..


Pasha пишет:

 цитата:
Я тоже не нашел общего ответа, как решить элу проблему.


Я обнаружил один момент , писал выше. Если с тем же XLS файлом проделывать
манипуляции по открытию его не важно из какой папки , минуя копирование по сети
то все открывается нормально. Видать какой то атрибут цепляется к файлу после
его копирования по сетке........вот его бы обнулить как то..

Спасибо: 0 
Профиль
PSP
постоянный участник


Пост N: 1572
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 14.11.19 15:36. Заголовок: http://winitpro.ru/i..


Dima пишет:

 цитата:
Видать какой то атрибут цепляется к файлу после
его копирования по сетке........вот его бы обнулить как то..


http://winitpro.ru/index.php/2015/03/17/kak-windows-opredelyaet-chto-fajl-skachan-iz-interneta/

Спасибо: 0 
Профиль
Dima
администратор




Пост N: 7140
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 14.11.19 17:28. Заголовок: PSP Пасиб за ссылку..


PSP
Пасиб за ссылку.
Что делать с этими атрибутами из Harbour не понятно..
Но посетила мысль , я взял файлик XLS по сети и сложил локально.
Далее читаю его содержимое через hb_MemoRead , файлик локально убиваю
и после пишу в файл с таким же именем через hb_memowrit
По идее от этого атрибута и следа не останется

Спасибо: 0 
Профиль
Haz
администратор




Пост N: 1502
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 14.11.19 17:52. Заголовок: Dima пишет: .вот ег..


Dima пишет:

 цитата:
.вот его бы обнулить как то..


Попробуй так


StrFile(FileStr(cFile ), cFile)
создастся локальный файл
PS Дим не заметил твое последнее с memowrit - по сути одно и тоже написали

Спасибо: 0 
Профиль
Dima
администратор




Пост N: 7141
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 14.11.19 17:58. Заголовок: Haz пишет: по сути ..


Haz пишет:

 цитата:
по сути одно и тоже написали


бывает

Спасибо: 0 
Профиль
PSP
постоянный участник


Пост N: 1573
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 14.11.19 19:56. Заголовок: Нормальный способ)) ..


Нормальный способ)) Костыль, конечно, но 100%-ый))

Спасибо: 0 
Профиль
Pasha
Администратор




Пост N: 3897
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 14.11.19 21:45. Заголовок: Вот описание работы ..


Вот описание работы с альтернативными потоками средствами winapi:

https://habr.com/ru/post/46990/

Можно сделать обертку этих вызовов на харборе. Насколько я понял, для получения списка потоков файла надо использовать функцию NtQueryInformationFile.
А для удаления потока подойдут и обычные файловые функции.

Спасибо: 0 
Профиль
Haz
администратор




Пост N: 1503
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 15.11.19 12:12. Заголовок: Dima пишет: его бы..


Dima пишет:

 цитата:
его бы обнулить как то..


Дим все оказалось просто;

Ferase( cFile + ":Zone.Identifier") удаляет этот альтернативный поток не трогая сам файл.

Более того стандартные файловые функции могут читать и писать в эти потоки.

Спасибо: 0 
Профиль
Ответов - 300 , стр: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 All [только новые]
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 507
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет