| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > Excel |
| Автор: Barmaley 14.8.2003, 08:15 | ||
Открыть существующий файл можно так:
А вот как заставить Excel создать новый файл? |
| Автор: <Spawn> 14.8.2003, 08:35 | ||
|
| Автор: Barmaley 14.8.2003, 08:46 |
| Огромное спасибо. Подскажите пожалуйста, где можно взять боле-менее толковые доки, описывающие подобные вещи? Заранее благодарен. |
| Автор: Akella 14.8.2003, 09:33 |
| Попробуй открыть справку в MS Excel по Visual Basic |
| Автор: Barmaley 14.8.2003, 11:45 | ||
| Чего-й-то я никак не могу сообразить как Visual Basic переложить на Delphi. Например
Помогите разобраться |
| Автор: <Spawn> 14.8.2003, 11:48 |
| Сначала скажи чего тебе нужно. |
| Автор: Barmaley 14.8.2003, 12:03 | ||
| На пример : Она из задач состоит в том, что данные из... ну допустим из StringGrid нужно перебросить в Excel.
Данные перебрасываются нормально, но только ужно некоторые столбцы в Excel раздвинуть до нужных размеров - Это раз! И не целые числа (т.е. например 56,5) Excel воспринимает как строку и предлагает вручную преобразовать их в число. - Это два! И хотелось бы кое-что выделить... скажем жирным шрифтом. - Это три. |
| Автор: <Spawn> 14.8.2003, 12:16 | ||||||
Для того, что бы не просил преобразовать попробуй сделать так:
Для редактирования размера сделай так:
Для изменения настроек текста делай так:
|
| Автор: Barmaley 14.8.2003, 14:33 | ||
На строку
Компилятор выдал: Project raised exception class EOleError with message [QUOTE]Method [QUOTE]Column[QUOTE] not supported automation object[/QUOTE]. Спасибо за помощь, но я неверно определил предлагает вручную преобразовать их в число Он не выдет алерты, ане правильно форматирует данные. |
| Автор: Akella 14.8.2003, 16:15 |
| Этот код у меня работает Сейчас еще что-нибудь отошлю 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 14.8.2003, 16:18 |
| 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 14.8.2003, 16:20 | ||
Вот код для определения ширины
|
| Автор: <Spawn> 14.8.2003, 17:27 | ||||
Ошибся видимо, попробуй Columns |
| Автор: Barmaley 15.8.2003, 07:02 | ||||||
Код
Работает нормально - весь первый столбец выделился жирным, а вот на строку
Отладчик ответил:
|
| Автор: Akella 15.8.2003, 09:07 |
| Незабывай добавлять, например, в закрытии приложения if VarIsEmpty(vExcel) then vExcel.Quit |
| Автор: Akella 15.8.2003, 09:09 |
| А какую веряию офиса ты используешь. У меня работает все нормально с любым. |