![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| Barmaley |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 12.8.2003 Репутация: нет Всего: нет |
Открыть существующий файл можно так:
А вот как заставить Excel создать новый файл? |
|||
|
||||
| <Spawn> |
|
|||
![]() Око кары:) ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2776 Регистрация: 29.1.2003 Где: Екатеринбург Репутация: 44 Всего: 64 |
-------------------- "Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков. |
|||
|
||||
| Barmaley |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 12.8.2003 Репутация: нет Всего: нет |
Огромное спасибо.
Подскажите пожалуйста, где можно взять боле-менее толковые доки, описывающие подобные вещи? Заранее благодарен. |
|||
|
||||
| Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 36 Всего: 329 |
Попробуй открыть справку в MS Excel по Visual Basic
|
|||
|
||||
| Barmaley |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 12.8.2003 Репутация: нет Всего: нет |
Чего-й-то я никак не могу сообразить как Visual Basic переложить на Delphi.
Например
Помогите разобраться |
|||
|
||||
| <Spawn> |
|
|||
![]() Око кары:) ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2776 Регистрация: 29.1.2003 Где: Екатеринбург Репутация: 44 Всего: 64 |
Сначала скажи чего тебе нужно.
-------------------- "Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков. |
|||
|
||||
| Barmaley |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 12.8.2003 Репутация: нет Всего: нет |
На пример :
Она из задач состоит в том, что данные из... ну допустим из StringGrid нужно перебросить в Excel.
Данные перебрасываются нормально, но только ужно некоторые столбцы в Excel раздвинуть до нужных размеров - Это раз! И не целые числа (т.е. например 56,5) Excel воспринимает как строку и предлагает вручную преобразовать их в число. - Это два! И хотелось бы кое-что выделить... скажем жирным шрифтом. - Это три. |
|||
|
||||
| <Spawn> |
|
||||||
![]() Око кары:) ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2776 Регистрация: 29.1.2003 Где: Екатеринбург Репутация: 44 Всего: 64 |
Для того, что бы не просил преобразовать попробуй сделать так:
Для редактирования размера сделай так:
Для изменения настроек текста делай так:
-------------------- "Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков. |
||||||
|
|||||||
| Barmaley |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 12.8.2003 Репутация: нет Всего: нет |
На строку
Компилятор выдал: Project raised exception class EOleError with message [QUOTE]Method [QUOTE]Column[QUOTE] not supported automation object[/QUOTE]. Спасибо за помощь, но я неверно определил предлагает вручную преобразовать их в число Он не выдет алерты, ане правильно форматирует данные. |
|||
|
||||
| Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 36 Всего: 329 |
Этот код у меня работает
Сейчас еще что-нибудь отошлю Procedure TFMMain.RepExcel;//отчет в эксель Var Range, Sheets:Variant; I, A:Integer; begin if Application.MessageBox('Копирование таблицы рейсов в MS Excel!', 'АВТОПЕРЕВОЗКИ2', MB_OKCANCEL)=IDOK then begin Try//открываем Excel и создаем раб.книгу Screen.Cursor:=crHourGlass; Excel:=CreateOleObject('Excel.Application'); Excel.SheetsInNewWorkbook:=1; Excel.WorkBooks.Add; Sheets:=Excel.Workbooks[1].Sheets[1]; Excel.Visible:=True; Except beep; Screen.Cursor:=crDefault; ShowMessage('Не могу открыть MS Excel!'); Exit; end; //заголовки столбцов Range:=Sheets.Range['a1:b1']; Range.Font.Bold:=True; Sheets.Cells[1,1]:=dbgrid1.Columns[0].Title.Caption; Sheets.Cells[1,2]:=dbgrid1.Columns[1].Title.Caption; Range:=Sheets.Range['a2:n2']; Range.Font.Bold:=True; Sheets.Cells[2,1]:=dbgrid2.Columns[0].Title.Caption; Sheets.Cells[2,2]:=dbgrid2.Columns[1].Title.Caption; Sheets.Cells[2,3]:=dbgrid2.Columns[2].Title.Caption; Sheets.Cells[2,4]:=dbgrid2.Columns[3].Title.Caption; Sheets.Cells[2,5]:=dbgrid2.Columns[4].Title.Caption; Sheets.Cells[2,6]:=dbgrid2.Columns[5].Title.Caption; Sheets.Cells[2,7]:=dbgrid2.Columns[6].Title.Caption; Sheets.Cells[2,8]:=dbgrid2.Columns[7].Title.Caption; Sheets.Cells[2,9]:=dbgrid2.Columns[8].Title.Caption; Sheets.Cells[2,10]:=dbgrid3.Columns[1].Title.Caption; Sheets.Cells[2,11]:=dbgrid3.Columns[2].Title.Caption; Sheets.Cells[2,12]:=dbgrid3.Columns[3].Title.Caption; Sheets.Cells[2,13]:=dbgrid3.Columns[4].Title.Caption; Sheets.Cells[2,14]:=dbgrid3.Columns[5].Title.Caption; with DM do begin tMachine.First; i:=3; a:=4; while not tMachine.Eof do begin i:=a+1; Sheets.Cells[i,1]:=tMachine.FieldByName('MMarka').AsString; Sheets.Cells[i,2]:=tMachine.FieldByName('MGosNum').AsString; tReys.First; a:=i+1; while not tReys.Eof do begin Sheets.Cells[a,1]:=tReys.FieldByName('RDate').AsString; Sheets.Cells[a,2]:=tReys.FieldByName('RMarsh').AsString; Sheets.Cells[a,3]:=tReys.FieldByName('RKM').AsFloat; Sheets.Cells[a,4]:=tReys.FieldByName('RStav').AsCurrency; Sheets.Cells[a,5]:=tReys.FieldByName('ROtpr').AsString; Sheets.Cells[a,6]:=tReys.FieldByName('RFioVod').AsString; Sheets.Cells[a,7]:=tReys.FieldByName('RKmBeg').AsFloat; Sheets.Cells[a,8]:=tReys.FieldByName('RKmEnd').AsFloat; Sheets.Cells[a,9]:=tReys.FieldByName('RDoh').AsCurrency; Sheets.Cells[a,10]:=tReys.FieldByName('RDopRash').AsCurrency; Sheets.Cells[a,11]:=tReys.FieldByName('RToplOut').AsCurrency; Sheets.Cells[a,12]:=tReys.FieldByName('RWorkTime').AsString; Sheets.Cells[a,13]:=tReys.FieldByName('RDizRest').AsString; Sheets.Cells[a,14]:=tReys.FieldByName('RNormCharge').AsString; tReys.Next; Application.ProcessMessages; a:=a+1; end;// I:=I+1; tMachine.Next; end;//while end;//with Screen.Cursor:=crDefault; end;//if application.messagebox end; |
|||
|
||||
| Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 36 Всего: 329 |
procedure TfmMain.tbExcelClick(Sender: TObject);
Var Range, Sheets:Variant; I, A:Integer; vA1,vA2: Integer;//кол-во символов в колонке vB1,vB2: Integer;//кол-во символов в колонке vC1,vC2: Integer;//кол-во символов в колонке vD1,vD2: Integer;//кол-во символов в колонке begin if not VarIsEmpty(Excel) then Excel.Quit; if Application.MessageBox('Создание отчета в MS Excel!', 'PATAGONIA', MB_OKCANCEL)=IDOK then begin DM.tSpis.DisableControls; //вычисляем кол-во символов в кажд колонке-ширина колонок with DM do begin//первый tSpis.MasterFields:=''; tSpis.First; While not tSpis.Eof do begin vA1:=Length(tSpis.FieldByName('DirName').asString); vB1:=Length(tSpis.FieldByName('Type').asString); vC1:=Length(tSpis.FieldByName('PathName').asString); vD1:=Length(tSpis.FieldByName('Prim').asString); tSpis.Next; if vA1>vA2 then vA2:=vA1; if vB1>vB2 then vB2:=vB1; if vC1>vC2 then vC2:=vC1; if vD1>vD2 then vD2:=vD1; end;//if tSpis.MasterFields:='ID'; vA2:=vA2-5; vB2:=vB2-5; vC2:=vC2-5; vD2:=vD2-5; if vA2<15 then vA2:=15; if vB2<15 then vB2:=15; if vC2<15 then vC2:=15; if vD2<15 then vD2:=15; end;//with dm Try//открываем Excel и создаем раб.книгу Screen.Cursor:=crHourGlass; Excel:=CreateOleObject('Excel.Application'); Excel.SheetsInNewWorkbook:=1; Excel.WorkBooks.Add; Sheets:=Excel.Workbooks[1].Sheets[1]; Except beep; Screen.Cursor:=crDefault; ShowMessage('Не могу открыть MS Excel!'); Exit; end; //заголовки столбцов Range:=Sheets.Range['a1:d1']; Range.Font.Bold:=True; Sheets.Cells[1,1]:=dbgrid2.Columns[0].Title.Caption; Sheets.Cells[1,2]:=dbgrid2.Columns[1].Title.Caption; Sheets.Cells[1,3]:=dbgrid2.Columns[2].Title.Caption; Sheets.Cells[1,4]:=dbgrid2.Columns[3].Title.Caption; with DM do begin tOpis.First; i:=2; a:=3; while not tOpis.Eof do begin i:=a+1; Range:=Sheets.Cells[i,1]; Range.Font.Bold:=True; //ширина Range.ColumnWidth:=vA2; Range:=Sheets.Cells[i,2]; Range.Font.Bold:=True; Range.ColumnWidth:=vB2; Range:=Sheets.Cells[i,3]; Range.Font.Bold:=True; Range.ColumnWidth:=vC2; Range:=Sheets.Cells[i,4]; Range.Font.Bold:=True; Range.ColumnWidth:=vD2; Sheets.Cells[i,1]:='Диск №: '+tOpis.FieldByName('NoDisk').AsString; Sheets.Cells[i,2]:='Название: '+tOpis.FieldByName('ExeName').AsString; Sheets.Cells[i,3]:='Описание: '+tOpis.FieldByName('Opis').AsString; Sheets.Cells[i,4]:='Примечание: '+tOpis.FieldByName('Prim').AsString; tSpis.First; a:=i+1; while not tSpis.Eof do begin Sheets.Cells[a,1]:=tSpis.FieldByName('DirName').AsString; Sheets.Cells[a,2]:=tSpis.FieldByName('Type').AsString; Sheets.Cells[a,3]:=tSpis.FieldByName('PathName').AsString; Sheets.Cells[a,4]:=tSpis.FieldByName('Prim').AsString; tSpis.Next; Application.ProcessMessages; a:=a+1; end;// I:=I+1; tOpis.Next; end;//while end;//with DM.tSpis.EnableControls; Screen.Cursor:=crDefault; Excel.Visible:=True; end;//if application.messagebox end; |
|||
|
||||
| Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 36 Всего: 329 |
Вот код для определения ширины
|
|||
|
||||
| <Spawn> |
|
||||
![]() Око кары:) ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2776 Регистрация: 29.1.2003 Где: Екатеринбург Репутация: 44 Всего: 64 |
Ошибся видимо, попробуй Columns -------------------- "Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков. |
||||
|
|||||
| Barmaley |
|
||||||
|
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 12.8.2003 Репутация: нет Всего: нет |
Код
Работает нормально - весь первый столбец выделился жирным, а вот на строку
Отладчик ответил:
|
||||||
|
|||||||
| Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 36 Всего: 329 |
Незабывай добавлять, например, в закрытии приложения
if VarIsEmpty(vExcel) then vExcel.Quit |
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |