Автор | Сообщение |
|
| |
Пост N: 352
Зарегистрирован: 08.04.06
|
|
Отправлено: 04.07.09 20:49. Заголовок: OLE: Сделать DBF из XLS
Возникла такая вот необходимость... есть у кого рабочий вариант? Нужно ведь проверять все колонки на содержание в первой строке беспробельного латинского наименования, и чтобы ни одно наименование не повторялось, приводить ширину колонки к целочисленной, и наверное кучу ещё тонкостей... И ещё интересно: в Excel 2007 через OLE сохранение в виде DBF-файла сработает, или она там обрублено напрочь - в меню сохранения файла ведь DBF-варианта уже нет...
|
|
|
Ответов - 59
, стр:
1
2
3
All
[только новые]
|
|
|
| Администратор
|
Пост N: 1261
Зарегистрирован: 23.05.05
|
|
Отправлено: 03.12.09 10:15. Заголовок: Andrey пишет: А как..
Andrey пишет: цитата: | А как отловить, что файл уже открыт ? |
| Хороший вопрос :) Первая мысль, которая возникла - проверить oExcel:WorkBooks:Count, и пройтись по этой коллекции Но оказалось, что при создании обьекта Excel запускается его новая копия, и Count равно нулю Надо как-то связаться с уже запущенным Excel Кстати, если из документа надо только брать данные, его можно открывать в режиме readonly, это 3-й параметр метода Open
|
|
|
|
| постоянный участник
|
Пост N: 982
Зарегистрирован: 12.09.06
|
|
Отправлено: 03.12.09 10:24. Заголовок: Другой вопрос: А ка..
Другой вопрос: А как прочитать значение ячейки ? Скрытый текст oExcel := TOleAuto():New( "Excel.Application" ) IF Ole2TxtError() != 'S_OK' cError := "Excel файл " + cFileXls + " не могу открыть !" + CLRF + CLRF + "EXCEL OLE ERROR [" + Ole2TxtError() + "]" MsgStop( cError, "Ошибка" ) lOpenXls := .F. ELSE lOpenXls := .T. ENDIF IF lOpenXls // Открыл без ошибок oExcel:Visible := .T. oExcel:Workbooks:Open( cFileXls, 0 ) oSheet := oExcel:Get( "ActiveSheet" ) oRange := oExcel:ActiveCell:SpecialCells( xlLastCell ) nLenRecnoXls := oRange:Row nLenColumnXls := oRange:Column cRecno := AllTrim(Str( nLenRecnoXls )) cColumn := AllTrim(Str( nLenColumnXls )) cRange := '"'+'A'+cRecno+':'+Chr(64+nLenColumnXls)+cRecno+'"' MsgInfo(cRange) cTemp := oSheet:Range( cRange ) MsgInfo( cTemp )
|
|
|
|
|
| Администратор
|
Пост N: 1262
Зарегистрирован: 23.05.05
|
|
Отправлено: 03.12.09 10:34. Заголовок: Andrey пишет: А как..
Andrey пишет: цитата: | А как прочитать значение ячейки ? |
| oSheet:Cells(nRow, nCol):Value
|
|
|
|
| |
Пост N: 14
Зарегистрирован: 07.06.08
|
|
Отправлено: 03.12.09 10:37. Заголовок: Чтение из активного ..
Чтение из активного документа (созданного другим приложением или открытого) TRY oExcel := GetActiveObject( "Excel.Application" ) CATCH TRY oExcel := CreateObject( "Excel.Application" ) CATCH Alert( "ERROR! Excel not avialable. [" + Ole2TxtError()+ "]" ) RETURN END END oExcel:ActiveWorkbook() oAS := oExcel:ActiveSheet() Количество закладок lw:= oExcel:Worksheets():count Нужная закладка lt oAS := oExcel:Worksheets(lt) Примеры чтения из вычисленной программой ячейки schet:=oAS:Range(nc+alltrim(str(num_str,6))):value Tip_s:=Alltrim(HB_ANSITOOEM(oAS:Range(nsc+alltrim(str(num_str,6))):value))
|
|
|
|
| постоянный участник
|
Пост N: 983
Зарегистрирован: 12.09.06
|
|
Отправлено: 03.12.09 10:47. Заголовок: Pasha пишет: oSheet..
Pasha пишет: цитата: | oSheet:Cells(nRow, nCol):Value |
| Что-то не совсем понятно..... Чему равно nRow, nCol ? Числам ? А где же "A150:B150" ? Или можно использовать 2 варианте ?
|
|
|
|
| Администратор
|
Пост N: 1263
Зарегистрирован: 23.05.05
|
|
Отправлено: 03.12.09 11:02. Заголовок: Это числовой номер с..
Это числовой номер строки и колонки Для Cells синтаксис A1 не поддерживается
|
|
|
|
| постоянный участник
|
Пост N: 984
Зарегистрирован: 12.09.06
|
|
Отправлено: 03.12.09 11:33. Заголовок: Спасибо ВСЕМ большое..
Спасибо ВСЕМ большое за помощь !!!
|
|
|
|
| постоянный участник
|
Пост N: 987
Зарегистрирован: 12.09.06
|
|
Отправлено: 03.12.09 23:45. Заголовок: Рано порадовался......
Рано порадовался.... Из памяти не выгружается ЕХСЕЛ... Хотя ставлю при выходе из функции oExcel:Quit() Где собака зарыта ?
|
|
|
|
| Администратор
|
Пост N: 1265
Зарегистрирован: 23.05.05
|
|
Отправлено: 03.12.09 23:52. Заголовок: попробуй так oBook:..
попробуй так oBook:Close(.f.) // закрытие документа-книги oExcel:Quit()
|
|
|
|
| постоянный участник
|
Пост N: 991
Зарегистрирован: 12.09.06
|
|
Отправлено: 05.12.09 01:06. Заголовок: Уф... сделал.... :s..
Уф... сделал.... Выкладываю ссылку на готовую программу. Может кому понадобиться.... http://files.mail.ru/YFRFIO Спасибо всем за помощь.....
|
|
|
|
| |
Пост N: 1
Зарегистрирован: 09.09.11
|
|
Отправлено: 09.09.11 06:58. Заголовок: Добрый день.... если..
Добрый день.... если можно выложить исходный код конвертера XLS To DBF буду благодарен... в XLS файле будут объедененные строки (код пункта продажи) далее идут строки код товара (до 8 строк) наименование товара, цена итд... По поводу объединенных строк если можно то поподробнее.... Конвертер из DBF To XLS с Вашей помощью уже сделал. Всем спасибо
|
|
|
|
|
| Администратор
|
Пост N: 2052
Зарегистрирован: 23.05.05
|
|
Отправлено: 09.09.11 08:44. Заголовок: Oskar_AAA пишет: По..
Oskar_AAA пишет: цитата: | По поводу объединенных строк если можно то поподробнее.... |
| Чтобы объединить в Excel произвольную область ячеек, надо выдать команды: oRange := oSheet:Range(oSheet:Cells(nRow1, nCol1), oSheet:Cells(nRow2, nCol2)) oRange:Merge()
|
|
|
|
| постоянный участник
|
Пост N: 238
Зарегистрирован: 06.02.07
|
|
Отправлено: 09.09.11 13:44. Заголовок: Pasha , Оскар про ..
|
|
|
|
| постоянный участник
|
Пост N: 1885
Зарегистрирован: 12.09.06
|
|
Отправлено: 10.09.11 14:05. Заголовок: Oskar_AAA пишет: ес..
Oskar_AAA пишет: цитата: | если можно выложить исходный код конвертера XLS To DBF буду благодарен |
| Я уже сделал 3 программки на Минигуи. С помощью наших гуру... Паши, Филатова и других... Пример выкладываю. Исходник конвертирования тоже выкладываю, там нетрудно понять и переделать на хХарбор. http://files.mail.ru/CP2U1B Я Филатову высылал полные исходники для МиниГуи. И как я вижу по Екселю нужны примеры решения тех или иных проблем. Может выложите кто уже работал готовые решения ? Типа: решение того-то ... исходник...
|
|
|
|
| |
Пост N: 18
Зарегистрирован: 08.02.11
|
|
Отправлено: 12.09.11 00:52. Заголовок: "Ася открыла для..
"Ася открыла для себя прокладки Олвейс" а я открыл для себя что под харбором для написания экселовских функций лучше использовать нотацию RC. Например //=СЧЁТ(RC[-10]:RC[-1]) //=СУММ(RC[-11]:RC[-2])/RC[-1] //написать формулы k:=len(aRes) ... for i:=1 to 24 //часы суток oSheet:Cells( Row1+i, 1+k+1):Formula:="=СЧЁТ(RC[-"+alltrim(str(k))+"]:RC[-1]" oSheet:Cells( Row1+i, 1+k+2):Formula:="=ОКРУГЛ(СУММ(RC[-"+alltrim(str(k+1))+"]:RC[-2])/RC[-1];0)" next 1-количество непустых ячеек среди К ячеек впереди текущей в текущей строке 2-среднее арифметическое среди вышеуказанных ячеек И никакой возни с преобразованием в буквенное наименование столбцов. P.S. можно оптимизировать - вынести формирование формул за цикл.
|
|
|
|
| |
Пост N: 2
Зарегистрирован: 09.09.11
|
|
Отправлено: 12.09.11 06:10. Заголовок: Добрый день, коллеги..
Добрый день, коллеги. Спасибо за информацию. Буду изучать. О результатах сообщу. Спасибо.
|
|
|
|
| |
Пост N: 3
Зарегистрирован: 09.09.11
|
|
Отправлено: 12.09.11 10:08. Заголовок: Андрей, добрый день...
Андрей, добрый день. У меня нет файла Excel.ch - где его взять. Использую xHarbour Compiler build 1.2.1 (SimpLex) (Rev. 6476)....
|
|
|
|
| постоянный участник
|
Пост N: 1886
Зарегистрирован: 12.09.06
|
|
Отправлено: 12.09.11 12:10. Заголовок: Oskar_AAA пишет: У ..
Oskar_AAA пишет: цитата: | У меня нет файла Excel.ch - где его взять. |
| Выслал на почту.
|
|
|
|
| |
Пост N: 4
Зарегистрирован: 09.09.11
|
|
Отправлено: 13.09.11 08:25. Заголовок: Добрый день, вроде п..
Добрый день, вроде получилось... по краней мере на сегодня устраивает. Данные формата Дата пока не пробовал принимать. Всем спасибо.
|
|
|
|
| |
Пост N: 48
Зарегистрирован: 25.02.10
|
|
Отправлено: 03.10.11 14:39. Заголовок: Andrey! Пока я вышел..
Andrey! Пока я вышел из отпуска твои линки уже не работают... Мож есчо раз выложить эти проги по конвертации?
|
|
|
Ответов - 59
, стр:
1
2
3
All
[только новые]
|
|