Export, Import данных в Excel и из Excel'a

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Ответить
Аватара пользователя
StillZero
Ветеран
Сообщения: 458
Зарегистрирован: 06 Июль 2005, 2:17
Откуда: Хабаровск
Поблагодарили: 1 раз
Контактная информация:

Export, Import данных в Excel и из Excel'a

Сообщение StillZero »

по поводу Excel недавно отписывал одному человеку, тут чтение, но запись вообще похожа:

1. определяешь данные, в секции данных

Код: Выделить всё

XlsFEQ LONG       ! OLE-контрол
DataQueue   QUEUE ! очередь данных
A              LONG
B              STRING(20)
            END
2. создаешь xls-файл

3. делаешь кнопку "поехали" а на ней код:

Код: Выделить всё

 XlsFEQ = CREATE(0, CREATE:OLE) ! создали OLE-контрол
 XlsFEQ{PROP:Create} = 'Excel.Application' ! сказали, что будем юзать
 XlsFEQ{'Application.Workbooks.Open("C:\Clarion6\APP\Temp\FromExcel\temp.xls")'} ! открыли, полный путь нужен
 XlsFEQ{'Application.Visible'} = TRUE ! показали Excel

 free(DataQueue) ! чтение в очередь
 loop row#=1 to 10 ! 10 рядов
    DataQueue.A=XlsFEQ{'Application.Cells(' & row# & ',1).Value'} ! два столбца
    DataQueue.B=XlsFEQ{'Application.Cells(' & row# & ',2).Value'}
    add(DataQueue)
 end

 loop 3 times ! уничтожили контрол
    destroy(XlsFEQ)
 end
советую почитать также это http://zero.clarionlife.net/Articles/PT/OleWord.shtml

и посмотреть примеры на clarionlife.net в файловом архиве

удачи...
Аватара пользователя
StillZero
Ветеран
Сообщения: 458
Зарегистрирован: 06 Июль 2005, 2:17
Откуда: Хабаровск
Поблагодарили: 1 раз
Контактная информация:

Сообщение StillZero »

нашел тут у себя пример класса для вывода в Excel, должен работать по идее, на крайний случай посмотришь как это делается
Caня

Сообщение Caня »

Спасибо! Все доходчиво и понятно.
Попробую.
iva
Новичок
Сообщения: 8
Зарегистрирован: 09 Октябрь 2005, 15:06
Откуда: г.Томск

Сообщение iva »

А в 6-ке этот пример не работает ...

Архипов Игорь
С наилучшими пожеланиями
lexa
Посетитель
Сообщения: 25
Зарегистрирован: 03 Июнь 2006, 23:57
Откуда: Зимбабве

Сообщение lexa »

StillZero
Здравствуйте.

В догонку к теме.
При импорте из Excel все без проблем, но при экспорте у меня возникло следующее неудобство.

Последующую часть кода я прикрепил к кнопке:

!!!!!!!!!!! запись Файла в Excel !!!!!!!!!!!!
xls_name"='C:\Файл №' & Format(Today(),@D05-)

XlsOLE#=CREATE(0,CREATE:OLE)
XlsOLE#{PROP:Create}='Excel.Application'
XlsOLE#{'Application.Visible'}=False
XlsOLE#{'Application.Workbooks.Add'}

.......
....... записываю в таблицу Excel
.......

XlsOLE#{'Application.ActiveWorkbook.SaveAs("' & xls_name" & '")'}
XlsOLE#{'ActiveWindow.Close(1)'}
XlsOLE#{'QUIT'}
XlsOLE#{Prop:Deactivate}

Вопрос? При записи на существующий файл Excel выдает окно(дословно текст окна):
"Файл '.......' уже существует в данном месте. Заменить?
Далее варианты: Да Нет Отмена
Если 'Да' - все нормально перезаписывается, если 'Нет' или 'Отмена' - это же окно появляется еще два раза.
Подскажите, что я не так делаю?
У меня C55EE(ABC),XP-Prof-SP2,Office-2003.
Последний раз редактировалось lexa 13 Июль 2006, 1:55, всего редактировалось 1 раз.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8033
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 28 раз
Поблагодарили: 96 раз

Сообщение Игорь Столяров »

Все правильно - MS Excel будет спрашивать подтверждение перезаписи, если файл существует.
Можно сильно не заморачиваясь, просто вставить Remove(Clip(xls_name)) перед сохранением - и все ... ;)
Аватара пользователя
StillZero
Ветеран
Сообщения: 458
Зарегистрирован: 06 Июль 2005, 2:17
Откуда: Хабаровск
Поблагодарили: 1 раз
Контактная информация:

Сообщение StillZero »

насчет того, что два раза спрашивает хз пробей этого Excel-я :)
по моему, чтобы отключить такого рода сообщения надо добавить после

Код: Выделить всё

XlsOLE#=CREATE(0,CREATE:OLE) 
XlsOLE#{PROP:Create}='Excel.Application'
такую строку

Код: Выделить всё

XlsOLE#{PROP:ReportException} = FALSE
lexa
Посетитель
Сообщения: 25
Зарегистрирован: 03 Июнь 2006, 23:57
Откуда: Зимбабве

Сообщение lexa »

Можно сильно не заморачиваясь, просто вставить Remove(Clip(xls_name)) перед сохранением - и все ...
Данный вариант не подходит в моем случае. Если файл существует, то нужно отказаться от перезаписи.

Код: Выделить всё

XlsOLE#{PROP:ReportException} = FALSE
Не помогает, все равно Excel переспрашивает 3 раза(выше указал 2 раза - плохо подсчитал).
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8033
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 28 раз
Поблагодарили: 96 раз

Сообщение Игорь Столяров »

Вот так обычно и бывает: человек спрашивает простой вопрос, ты даешь на него очевидный ответ, а потом начинаю проясняться подробности и что там уже навернуто ХЗ что ... ;)

Уважаемый ! Может Вы нормально поставите задачу полностью ? И если Вы не можете склеить логику сохранения XLS файла из трех шагов - мы Вам ее распишем ... ? Ждемс ...
lexa
Посетитель
Сообщения: 25
Зарегистрирован: 03 Июнь 2006, 23:57
Откуда: Зимбабве

Сообщение lexa »

Уважаемый ! Может Вы нормально поставите задачу полностью ? И если Вы не можете склеить логику сохранения XLS файла из трех шагов - мы Вам ее распишем ... ? Ждемс ...
1.Разные пользователи в неопределенные моменты времени формируют отчет, который программа должна записать в файл Excel.
2.Имя этого файла будет формироваться автоматически, примерно так - ТЕМА & текущая дата & текущий час.
3.Если этот файл уже сформирован одним пользователем, другой пользователь при определенных условиях либо перезаписывает этот файл, либо его не трогает.

Вопрос такой - почему при отказе или отмене перезаписи, Excel выдает еще три раза одно и то же окно подтверждения и как можно от этого избавиться?
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8033
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 28 раз
Поблагодарили: 96 раз

Сообщение Игорь Столяров »

Насколько я понимаю - весь вопрос в 3-ем пункте. У меня вопросов при перезаписи не задается. Давай маленький пример создания файла, и его записи - как ты это делаешь, буду сравнивать со своим кодом. С другой стороны - описанный ранее вариант с удалением файла перед записью тоже будет работать. Главное, что бы файл не был открыт другим юзером в сети ...
Ответить