Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2005.02.06;
Скачать: [xml.tar.bz2];

Вниз

Создание файла эксель и запись в него при помощи OLE   Найти похожие ветки 

 
Pine   (2005-01-23 01:51) [0]

Никто не подкинет пример?
В факе есть отличный пример для открытия и считывания из существующего экселевского файла .
(с моими небольшими доработками "по месту" получилось вот что)
=====================
procedure TForm1.Button1Click(Sender: TObject);
var
 Excel : Variant;
 WorkSheet : Variant;
 I, J  : Integer;
 cls_ExcelObject  : string;
 regData : TRegistry;
begin

 cls_ExcelObject := "Excel.Application";
 regData := TRegistry.Create;
   regData.RootKey := HKEY_CLASSES_ROOT;
     try    if regData.OpenKey("\Excel.Application\CurVer", False) then
         begin      cls_ExcelObject := regData.ReadString("");
               regData.CloseKey;
          end
    finally    regData.Free;  end;

 if OpenDialog1.Execute then begin
   Excel := CreateOleObject(  cls_ExcelObject );
   Excel.Visible := False;
   Excel.Workbooks.Open( OpenDialog1.FileName );

   WorkSheet := Excel.Workbooks[1].WorkSheets[1];
   ListView1.Columns.Clear;
   ListView1.Items.Clear;
   for I := 1 to WorkSheet.Cells.CurrentRegion.Columns.Count do
      ListView1.Columns.Add.Caption := VarToStr( WorkSheet.Cells[1,I] );
   for I := 1 to WorkSheet.Cells.CurrentRegion.Rows.Count do
    with ListView1.Items.Add do begin
     Caption := VarToStr( WorkSheet.Cells[I,1] );
     for J := 2 to WorkSheet.Cells.CurrentRegion.Columns.Count do
       SubItems.Add( VarToStr( WorkSheet.Cells[I,J] ));
   end;
   Excel.Workbooks.Close;
   Excel.Quit;
 end;
end;
===================

Но мне нужно сформировать файл экселевский и несколкьо строчек туда закинуть в нужные ячейки...


 
GanibalLector ©   (2005-01-23 02:05) [1]

Во первых,обьясни на кой тебе считывать из реестра?
CreateOleObject("Excel.Application")
запускается на всех ОС с любой версией Excel.

> несколкьо строчек туда закинуть в нужные ячейки.
Excel.WorkBooks[1].Sheets[1].Cells[2,2]:="GanibalLector";


 
Pine   (2005-01-23 11:40) [2]

Считывать из реестра нужно было раньше (сейчас возможно не надо) - так как иначе если эксели на машинах были разные то происходила ошибка. Из реетса подставляется номер версии экселя (повторюсь что наверное сейчас это делает сама Делфи не озабачивая такими нюансами программера)

Мне нужно сделать экспорт данных из делфи в экселевский файл.
Раньше (программа работает 6 лет) я его делал в текстовой а сейчас апгрейдили принимающую программу и они требуют чтобы данные были в экселевском файле.

Меня озабачивает не сама строка кода как именно записать в открытый экселевский файл, а как из Делфи создать НОВЫЙ экселевский файл, присвоить ему имя ,  добавить туда  нужную мне инфу,сохранить и закрыть файл.
ПОследние несколько лет я практически не занимаюсь программированием, вчера сел и как оказалось очень тяжко входить в процесс, торможу. (В D7 я даже не могу найти хелп на компоненты типа ExcelAplication, как только не перестраивал справку. Смотрю пока исходники компонентов - но это весьма неудобно да и самого хелпа то почитать не получается)


 
OlegP ©   (2005-01-23 12:00) [3]

Procedure Tform6.WriteIntoExel;
Var
ExcelApp, Workbook, Range, Cell1, Cell2, ArrayData: Variant;
St:String;
BeginCol,BeginRow, I,J:integer;
RowCount,ColCount:integer;
begin
BeginCol:=2;
BeginRow:=2;
RowCount:=Form4.Query1.RecordCount+1+5*Form5.ListBox1.Items.Count;
ColCount:=10;
ExcelApp:=CreateOleObject("Excel.Application");
ExcelApp.Application.EnableEvents:=false;
Workbook:=ExcelApp.WorkBooks.Add;
ArrayData:=VarArrayCreate([1,RowCount,1,ColCount],varVariant);
Form4.Query1.First;
St:=Form4.Query1.FieldByName("name").AsVariant;
J:=6;
ArrayData[1,3]:="Отчет по отгрузке готовой продукции";
ArrayData[3,2]:=Form4.Query1.FieldByName("name").AsVariant;
ArrayData[4,5]:="За период с "+ Form5.MaskEdit1.Text + " по " + Form5.MaskEdit2.Text;
for i:=1 to Form4.Query1.RecordCount do
    Begin
      If St<>Form4.Query1.FieldByName("name").AsVariant then
        begin
          St:=Form4.Query1.FieldByName("name").AsVariant;
          ArrayData[j+2,2]:=Form4.Query1.FieldByName("name").AsVariant;
          ArrayData[j+3,5]:="За период с "+ Form5.MaskEdit1.Text + " по " + Form5.MaskEdit2.Text;
          j:=j+5;
        end;
      ArrayData[J,1]:=Form4.Query1.FieldByName("Name_1").AsVariant;
      ArrayData[J,6]:=Form4.Query1.FieldByName("Sum of Allart").AsVariant;
      ArrayData[J,7]:=Form4.Query1.FieldByName("Edizm").AsVariant;
      j:=j+1;
      Form4.Query1.Next;
    end;
   Cell1:=WorkBook.WorkSheets[1].Cells[BeginRow,BeginCol];
   Cell2:=WorkBook.WorkSheets[1].Cells[BeginRow+RowCount-1,BeginCol+ColCount-1];
   Range:=WorkBook.WorkSheets[1].Range[Cell1,Cell2];
   Range.Value:=ArrayData;
   ExcelApp.Visible:=true;
end;


 
ninja ©   (2005-01-23 12:01) [4]

Excel.Workbooks[1].SaveAs(FileName);


 
Pine   (2005-01-23 12:07) [5]

ГРОМАДНОЕ спасибо господа!
Сегодня вечерком думаю смогу сделать на основе этих кодов то что мне надо.


 
ninja ©   (2005-01-23 12:08) [6]

но есть глюки с работой [4] (хотя, может, это только у меня глючно работает). Проблема в том, что на сохранение таблички уходит ~ полминуты (200 строк, 15 столбцов). Причём, если я делаю visible=true (отображается процесс заполнения ячеек), и затем тыкаю куда-нибудь, например, в меню, то запись ускоряется раз в 5.

Вот хочу спросить: есть ли у экселя какие-нибудь методы типа BeginUpdate/EndUpdate, или что-то, чтобы ускорить запись.


 
GanibalLector ©   (2005-01-23 12:36) [7]

Для ускорения,использую буфер(хотя,многим не нравиться).Есть скоростной вариант для Word.Могу показать...

>затем тыкаю куда-нибудь, например, в меню, то запись ускоряется раз в 5
Судя по всему,это из-за приоритета.


 
Leonid Troyanovsky ©   (2005-01-23 13:01) [8]


> ninja ©   (23.01.05 12:08) [6]

> Вот хочу спросить: есть ли у экселя какие-нибудь методы
> типа BeginUpdate/EndUpdate, или что-то, чтобы ускорить запись.


Application.ScreenUpdating

--
Regards, LVT.



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2005.02.06;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.035 c
1-1106247371
Falcon(TFsoft)
2005-01-20 21:56
2005.02.06
Узнать о том что программа закрылась...


1-1106295507
Poha
2005-01-21 11:18
2005.02.06
RichEdit


14-1105823247
olookin
2005-01-16 00:07
2005.02.06
Неожиданное открытие?


14-1105948219
Морфеус
2005-01-17 10:50
2005.02.06
Хостинг, что посоветуете


3-1105272952
makey22
2005-01-09 15:15
2005.02.06
Создание отчета





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский