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




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


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

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 202 , стр: 1 2 3 4 5 6 7 8 9 10 11 All [только новые]


администратор




Пост N: 7025
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 10.03.19 21:57. Заголовок: Vlad04 Можно погугл..


Vlad04
Можно погуглить "чтение файла excel ole"

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

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




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


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

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


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


Pasha

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

Спасибо: 0 
ПрофильЦитата Ответить
moderator


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


Vlad04 пишет:

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


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

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


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


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

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

Спасибо: 0 
ПрофильЦитата Ответить
moderator


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


Vlad04 пишет:

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


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

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


Пост 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 
ПрофильЦитата Ответить
постоянный участник


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


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

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост 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 
ПрофильЦитата Ответить
moderator


Пост 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 
ПрофильЦитата Ответить
администратор




Пост 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 
ПрофильЦитата Ответить
Администратор




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


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

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

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

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

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

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

Спасибо: 0 
ПрофильЦитата Ответить
администратор




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


Pasha пишет:

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


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

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


Пост 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 
ПрофильЦитата Ответить
администратор




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


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

Спасибо: 0 
ПрофильЦитата Ответить
moderator


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


Dima пишет:

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


Попробуй так


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

Спасибо: 0 
ПрофильЦитата Ответить
администратор




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


Haz пишет:

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


бывает

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


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


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

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




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


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

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

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

Спасибо: 0 
ПрофильЦитата Ответить
moderator


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


Dima пишет:

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


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

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

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

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 202 , стр: 1 2 3 4 5 6 7 8 9 10 11 All [только новые]
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 100
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет