Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Excel, Как заставить Excel создать новый файл? 
:(
    Опции темы
Barmaley
Дата 14.8.2003, 08:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 12.8.2003

Репутация: нет
Всего: нет



Открыть существующий файл можно так:

Код
procedure TForm1.Exel_BtnClick(Sender: TObject);
var
Excel : Variant;
WorkSheet : Variant;
begin
if OpenDialog1.Execute then begin
  Excel := CreateOleObject('Excel.Application');
  Excel.Visible := True;
  Excel.Workbooks.Open( OpenDialog1.FileName );
  WorkSheet := Excel.Workbooks[1].WorkSheets[1];
{
  Excel.Workbooks.Close;
  Excel.Quit;
}
end;
end;


А вот как заставить Excel создать новый файл?
PM MAIL   Вверх
<Spawn>
Дата 14.8.2003, 08:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

Репутация: 44
Всего: 64



Код
Excel.WorkBooks.Add(1);



--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
Barmaley
Дата 14.8.2003, 08:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 12.8.2003

Репутация: нет
Всего: нет



Огромное спасибо.

Подскажите пожалуйста, где можно взять боле-менее толковые доки, описывающие подобные вещи?

Заранее благодарен.
PM MAIL   Вверх
Akella
Дата 14.8.2003, 09:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



Попробуй открыть справку в MS Excel по Visual Basic
PM MAIL   Вверх
Barmaley
Дата 14.8.2003, 11:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 12.8.2003

Репутация: нет
Всего: нет



Чего-й-то я никак не могу сообразить как Visual Basic переложить на Delphi.
Например
Код
Worksheets("Sheet1").Range("A1:D8"). _
   AutoFormat Format:=xlRangeAutoFormatClassic1

Помогите разобраться
PM MAIL   Вверх
<Spawn>
Дата 14.8.2003, 11:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

Репутация: 44
Всего: 64



Сначала скажи чего тебе нужно.


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
Barmaley
Дата 14.8.2003, 12:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 12.8.2003

Репутация: нет
Всего: нет



На пример :

Она из задач состоит в том, что данные из... ну допустим из StringGrid нужно перебросить в Excel.

Код
procedure TBaseEditForm.In_Exel_BtnClick(Sender: TObject);
var
 Excel, WorkSheet : Variant;
 i, j  : Integer;
begin
 Excel := CreateOleObject('Excel.Application');
 Excel.Visible := True;
 Excel.Workbooks.Add(1);
 For j:= 1 to SellGrid.RowCount-1 do
   For i:= 0 to SellGrid.ColCount-1 do Begin
     WorkSheet.Cells.CurrentRegion.Cells[j,i+1]:=SellGrid.Cells[i,j];
   End;
end;


Данные перебрасываются нормально, но только ужно некоторые столбцы в Excel раздвинуть до нужных размеров - Это раз!
И не целые числа (т.е. например 56,5) Excel воспринимает как строку и предлагает вручную преобразовать их в число. - Это два!
И хотелось бы кое-что выделить... скажем жирным шрифтом. - Это три.
PM MAIL   Вверх
<Spawn>
Дата 14.8.2003, 12:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

Репутация: 44
Всего: 64



Для того, что бы не просил преобразовать попробуй сделать так:
Код
Excel.DisplayAlerts:=False

Для редактирования размера сделай так:
Код
Excel.Column[1].ColumnWidth:=100;

Для изменения настроек текста делай так:
Код
Excel.Cells[1,1].Font.Bold:=True;
Excel.Cells[1,1].Font.Size:=13;
//и т.д.



--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
Barmaley
Дата 14.8.2003, 14:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 12.8.2003

Репутация: нет
Всего: нет



На строку
Код
Excel.Column[1].ColumnWidth:=100;

Компилятор выдал:

Project raised exception class EOleError with message [QUOTE]Method [QUOTE]Column[QUOTE] not supported automation object[/QUOTE].

Спасибо за помощь,

но я неверно определил предлагает вручную преобразовать их в число
Он не выдет алерты, ане правильно форматирует данные.
PM MAIL   Вверх
Akella
Дата 14.8.2003, 16:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 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;
PM MAIL   Вверх
Akella
Дата 14.8.2003, 16:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 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;

PM MAIL   Вверх
Akella
Дата 14.8.2003, 16:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



Вот код для определения ширины
Код

Range:=Sheets.Cells[i,1];
Range.Font.Bold:=True;
Range.ColumnWidth:=vA2;

PM MAIL   Вверх
<Spawn>
Дата 14.8.2003, 17:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

Репутация: 44
Всего: 64



Цитата(Barmaley @ 14.8.2003, 06:33)
На строку
Код
Excel.Column[1].ColumnWidth:=100;

Компилятор выдал:

Project raised exception class EOleError with message [QUOTE]Method [QUOTE]Column[QUOTE] not supported automation object[/QUOTE].

Спасибо за помощь,

но я неверно определил предлагает вручную преобразовать их в число
Он не выдет алерты, ане правильно форматирует данные.

Ошибся видимо, попробуй Columns


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
Barmaley
Дата 15.8.2003, 07:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 12.8.2003

Репутация: нет
Всего: нет



Код

Код
 
 Range:=Excel.Columns[1];
 Range.Font.Bold:=True;


Работает нормально - весь первый столбец выделился жирным, а вот на строку

Код

 Range.ColumnWidth:=400;


Отладчик ответил:

Код

Нельзя установить свойство [B]ColumnWidth[/B] класса [B]Range[/B]


PM MAIL   Вверх
Akella
Дата 15.8.2003, 09:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



Незабывай добавлять, например, в закрытии приложения
if VarIsEmpty(vExcel) then vExcel.Quit
PM MAIL   Вверх
Akella
Дата 15.8.2003, 09:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



А какую веряию офиса ты используешь. У меня работает все нормально с любым.
PM MAIL   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0588 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.