Какая версия Delphi?
(Просто есть несколько путей: либо CreateObject и работать с книгой, либо работать с компонентами, которые появились в D4 и модифицировались.)
По свойствам и методам объектов MsOffice сведения можно почерпнуть их справки по VBA, а также в форуме по VBA.
При переводе VBA в D есть некоторые особенности, например круглые скобки после обращения к коллекциям и массивам превращаются в квадратные; передачи аргументов по имени ессно не бывает и т.п.
И вообще, AiK, давай эту тему в Delphi перенесем.
Delphi&Excel
Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду
- Naeel Maqsudov
- Сообщения: 2570
- Зарегистрирован: 20 фев 2004, 19:17
- Откуда: Moscow, Russia
- Контактная информация:
Delphi 5.0 Excel 2000
Да все это понятно, мне бы кусочек кода
как это делается я и так знаю
RExcel := CreateOLEObject('Excel.Application');
RExcel.Visible := True; //
RWorkBook := RExcel.WorkBooks.Open('Alex.xls');
FSheet := RWorkBook.Sheets['Alex']
FSheet.Cells[2, 'E'] := '=SUM(E6:E12000'; // РАБОТАЕТ!
FSheet.Cells[2, 'E'] := '=суммесли( ... )'; // не работает
FSheet.Cells[2, 'E'] := '=sumif( ... )'; // не работает
FSheet.Cells[2, 'E'].Value := '=суммесли( ... )'; // не работает
FSheet.Cells[2, 'E'].Formula := '=суммесли( ... )'; // не работает
Вот как в VBA копируется лист
Sheets("Лист1").Select
Sheets("Лист1").Copy Before:=Sheets(1)
а как это на делфи?
Да все это понятно, мне бы кусочек кода
как это делается я и так знаю
RExcel := CreateOLEObject('Excel.Application');
RExcel.Visible := True; //
RWorkBook := RExcel.WorkBooks.Open('Alex.xls');
FSheet := RWorkBook.Sheets['Alex']
FSheet.Cells[2, 'E'] := '=SUM(E6:E12000'; // РАБОТАЕТ!
FSheet.Cells[2, 'E'] := '=суммесли( ... )'; // не работает
FSheet.Cells[2, 'E'] := '=sumif( ... )'; // не работает
FSheet.Cells[2, 'E'].Value := '=суммесли( ... )'; // не работает
FSheet.Cells[2, 'E'].Formula := '=суммесли( ... )'; // не работает
Вот как в VBA копируется лист
Sheets("Лист1").Select
Sheets("Лист1").Copy Before:=Sheets(1)
а как это на делфи?
- Naeel Maqsudov
- Сообщения: 2570
- Зарегистрирован: 20 фев 2004, 19:17
- Откуда: Moscow, Russia
- Контактная информация:
Во-первых, рекомендуюFSheet.Cells[2, 'E'] := '=суммесли( ... )'; // не работает
FSheet.Cells[2, 'E'] := '=sumif( ... )'; // не работает
FSheet.Cells[2, 'E'].Value := '=суммесли( ... )'; // не работает
FSheet.Cells[2, 'E'].Formula := '=суммесли( ... )'; // не работает
FSheet.Cells[2, 'E'].Formula при этом назания функций типа CУММЕСЛИ надо заменить на соответствующие английский. Поищите у себя в дебрях /Program Files/Microsoft Office файл Funcs.xls там есть ВСЕ функции.
Если хотите использовать русские названия, то используйте FormulaLocal вместо Formula. Но учтите, что Ваша программа не сможет работать с нерусским Офисом.
Во-вторых, есть разница между Formula и FormulaR1C1. Почитайте справку по VBA. Вопросы задавайте на соответствующей доске (по вопросам VB(A))
- Naeel Maqsudov
- Сообщения: 2570
- Зарегистрирован: 20 фев 2004, 19:17
- Откуда: Moscow, Russia
- Контактная информация:
Думаю так:Вот как в VBA копируется лист
Sheets("Лист1").Select
Sheets("Лист1").Copy Before:=Sheets(1)
а как это на делфи?
RWorkBook.Sheets['Лист1'].Copy(RWorkBook.Sheets[1])
Старайтесь не использовать Select или Activate, а обращайтесь к объектам НАПРЯМУЮ, если не перемещать фокус, то все будет работать быстрее.
Спасибо, все именно так и работает
Александр
Александр