Форум » [x]Harbour » OLE: Сделать DBF из XLS » Ответить

OLE: Сделать DBF из XLS

Лукашевский: Возникла такая вот необходимость... есть у кого рабочий вариант? Нужно ведь проверять все колонки на содержание в первой строке беспробельного латинского наименования, и чтобы ни одно наименование не повторялось, приводить ширину колонки к целочисленной, и наверное кучу ещё тонкостей... И ещё интересно: в Excel 2007 через OLE сохранение в виде DBF-файла сработает, или она там обрублено напрочь - в меню сохранения файла ведь DBF-варианта уже нет...

Ответов - 59, стр: 1 2 3 All

fil: А в чем собственно проблема, отрыть файл XLS через OLE, почитать его в цикле и зписать в DBF ?

Лукашевский: fil пишет: А в чем собственно проблема Проблема далеко не одна, часть из них я указал прямо в своём вопросе, и ещё может быть проблема с записью DBF в Excel 2007, - ты что, только название темы прочёл, а сообщение решил не читать?

Лукашевский: Народ, так что, никто не решал эту проблему? Проблема: нужно закинуть в базу накладную или прайс. Требовать от поставщиков юзверя DBF-файл уже нереально - 2007-й Офис, на который все потихоньку переходят, файлы в DBF-формате не сохраняет, да и не все с этим справляются даже в тех версиях M$ Office (чтобы колонки были целочисленной ширины, и т.п.). Остаётся файл XLS. Принимать его в виде XLS - проверить колонки, сформировать массив - наверное можно, НО работы море всё это реализовывать, при этом всё для принятия DBF-файла в программе уже сделано. Вывод: надо из XLS-файла самому делать DBF-файл, и принимать в базу уже его. Странно, что никто раньше до этого решения не додумался...


Лукашевский: Почти справился с задачей, но возник маленький ньюанс: надо как-то определять, записано в ячейке Excel'я число 40.00 или 40 целое, а как это сделать - не представляю... Подскажите, люди добрые! А ещё бы лучше определять это уже в Harbour'e, когда значение из Excel'я уже прочитано. Но тоже непонятно, как именно это сделать.

Петр: Лукашевский пишет: надо как-то определять, записано в ячейке Excel'я число 40.00 или 40 целое Обьект Range свойство NumberFormat - для 40,00 будет определено как "0.00", для 40 - "0"

Лукашевский: Петр пишет: Обьект Range свойство NumberFormat Спасибо.

Andrey: Лукашевский пишет: Почти справился с задачей А результат покажешь ?

Лукашевский: Andrey пишет: А результат покажешь ? Когда убедюсь, что оно работает :-) Написать мало, отладить надо, однако.

Лукашевский: Очередная проблема: не читается из XLS-файла дата, по крайней мере по oSheet:Cells(y, i):Value Смотрю в XLS-файл - а там все значения дат в этой колонке отображены решётками (########). Хотя когда какая-либо ячейка в этой колонке активна, в строке значения (fx) высвечивается нормальная дата, правильное значение. Смотрю ширину поля: 8. Может быть дело в этом, и надо ставить ширину 10, но мне-то нужно, чтобы функция работала всегда, безотносительно ширины колонки в Excel'e! Опять-таки, каким-то образом сам Excel может читать такие значения - ведь в строке значений они высвечиваются правильно... Что с этим делать - пока не представляю. Может, есть какие-то ещё функции получения значения из ячейки?

Лукашевский: Поставил ширину колонки даты 10, всё отображается без проблем, НО: читаются из ячеек этой колонки всё равно пустые значения!!! Никто с такой фишкой не сталкивался?

Лукашевский: Ещё одна проблема: открываю с помощью WorkBooks:Open() файл, имя которого содержит пробелы. Excel выдаёт ошибку: Excel.Application:WORKBOOKS/14 DISP_E_BADPARAMCOUNT: OPEN что в общем понятно. Непонятно только, как с этим бороться. Пробовал заключать имя файла в кавычки - не помогает...

Pasha: Пробелы в имени тут ни при чем. Скорее всего, имя документа надо преобразовать в кодировку ansi, или указан неверный путь (надо указывать полный путь к файлу)

Лукашевский: Pasha пишет: надо преобразовать в кодировку ansi Да, действительно, проблема была в кодировке... Так что осталась всего одна проблема - дата из Exel'евского файла всегда читается пустая...

Andrey: Потребовалось теперь мне сделать из XLS файл DBF. Структура простая: Текстовое поле, числовое поле (целое), числовое поле (сумма). Как узнать сколько в файле XLS кол-во строк, т.е. как в DBF функция LASTREC() или RecCount() ? И как сделать перебор "полей" XLS - файла ? Кинь пожалуйста пример .... Заранее спасибо !

Pasha: oRange = oExcel:ActiveCell:SpecialCells(xlLastCell) oRange:Row oRange:Column

Andrey: Не совсем понятно !!! Хотелось бы в таком стиле: USE OPLANA NEW nRecKolvo := LASTREC() SELECT OPLATA GOTO TOP FOR nI := 1 TO nRecKolvo GOTO nI // моя обработка // NEXT

Pasha: Смысл в том, что выбирается последняя, т.е. нижняя правая ячейка документа. Затем определяются ее координаты. Это и есть количество строк и столбцов в документе. А затем - традиционный двойной цикл с обходом всех ячек.

Andrey: А как открыть XLS файл, чтоб Екселя на экране не было ? Дайте пожалуйста пример ..... А то я только с Вордом работать умею (чуть-чуть).....

Pasha: Andrey пишет: А как открыть XLS файл, чтоб Екселя на экране не было ? oExcel := TOleAuto():New( "Excel.Application" ) oExcel:Visible := .f. oExcel:Workbooks:Open( cFile, 0 )

Andrey: А как отловить, что файл уже открыт ?



полная версия страницы