IMHO.WS

IMHO.WS (http://www.imho.ws/index.php)
-   Программирование (http://www.imho.ws/forumdisplay.php?f=40)
-   -   запись excel (http://www.imho.ws/showthread.php?t=147780)

fcdk_pavel 16.09.2013 11:21

запись excel
 
Код:

unit Unit7;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs,  StdCtrls, Grids, DBGrids, DB, DBTables;

type
  TForm7 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    StringGrid1: TStringGrid;
    SaveDialog1: TSaveDialog;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);

  private
      function  GetExcelSaveAs: String;
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form7: TForm7;

implementation

uses Unit6, Unit5, ComObj;

{$R *.dfm}

    function TForm7.GetExcelSaveAs: String;
begin
Result:= SaveDialog1.FileName + '.xls';
end;

    procedure TForm7.Button1Click(Sender: TObject);
var
ExcelApp, Sheet: variant;
Col, Row: Word;
  begin
if SaveDialog1.Execute then
  begin
ExcelApp:= CreateOleObject('Excel.Application');
  try
ExcelApp.Visible:= False;
ExcelApp.Workbooks.Add;
Sheet:= ExcelApp.ActiveWorkBook.WorkSheets[1];
  for Col:= 0 to StringGrid1.ColCount -1 do
  for Row:= 0 to StringGrid1.RowCount -1 do
Sheet.Cells[Row + 1, Col +1]:= StringGrid1.Cells[Col, Row];
ExcelApp.ActiveWorkbook.SaveAs(GetExcelSaveAs);
  finally
ExcelApp.Application.Quit;
ExcelApp:= Unassigned;
Sheet:= Unassigned;
    end;
  end;
ShowMessage('Сохранение завершено!');
end;


procedure TForm7.Button2Click(Sender: TObject);

begin
 StringGrid1.RowCount:=31;
 StringGrid1.ColCount:=9;
 StringGrid1.ColWidths[1]:=150;
 StringGrid1.ColWidths[2]:=85;
 StringGrid1.ColWidths[3]:=85;
 StringGrid1.ColWidths[4]:=85;
 StringGrid1.ColWidths[5]:=90;
 StringGrid1.ColWidths[6]:=85;
 StringGrid1.ColWidths[7]:=85;
 StringGrid1.ColWidths[8]:=85;
 StringGrid1.Cells[1,0]:='Дата';
 StringGrid1.Cells[2,0]:='Вода питьевая';
 StringGrid1.Cells[3,0]:='Вода техническая';
 StringGrid1.Cells[4,0]:='Вода оборотная';
 StringGrid1.Cells[5,0]:='Собственные нужды';
 StringGrid1.Cells[6,0]:='Итог по сводке';
 StringGrid1.Cells[7,0]:='Итог по цеху';
 StringGrid1.Cells[1,1]:=Form5.Edit3.Text+Form5.ComboBox1.Text+'2013';
 StringGrid1.Cells[2,1]:=Form6.edit1.Text;
 StringGrid1.Cells[3,1]:=Form6.edit2.Text;
 StringGrid1.Cells[4,1]:=Form6.edit3.Text;
 StringGrid1.Cells[5,1]:=Form6.edit4.Text;
 StringGrid1.Cells[6,1]:=Form6.edit8.Text;
 StringGrid1.Cells[7,1]:=Form6.edit10.Text;
 end;


end.

Вот кусок кода который создает файл Экселя Как сделать так чтобы при следующем расчете программы(в предыдущих модулях) новые расчеты попадали уже в созданный файл(добавление в файл новых результатов расчета) а старые не исчезал(не перезаписывались)??? Помогите пожалуйста!

Hubbitus 17.09.2013 10:04

Думаю вам стоит задать просто другое имя файла в строке:
Код:

Result:= SaveDialog1.FileName + '.xls';

Borland 19.09.2013 23:19

Цитата:

Сообщение от Hubbitus (Сообщение 1772309)
задать просто другое имя файла в строке:

Это просто-напросто даст новый файл, с другим именем.

fcdk_pavel, мне думается, что нужно:
а) проверить файл на существование; если его до сих пор нет - создать, задать ширину колонок и заголовки столбцов.
б) если файл существовал ранее - прочитать, получить количество непустых строк (N) и писАть вводимые данные начиная с новой (N+1); если не существовал - и только что создан - со второй (первая - заголовок) строки.

Это только алгоритм, как это реализовать на Delfi (насколь я понимаю, Ваша программа именно на нём?) - не в курсе.
Offtop:
Последний раз программы писАл лет 10 назад, на C++ и без использования COM. :)


P.S. Можно ещё, из перфекционизма, при открытии уже существующего файла, спросить что с ним делать: дописать данные в конец или стереть и заменить новыми. Это, наверное, будет более правильно идеологически. ;)
А вообще форму для заполнения таблички в M$ Excel обычно принято в самом же Excel и лепить. :biggrin:
Offtop №2:
Мне даже приходилось видеть целые БД, написанные в Excel; при сколь-нибудь заметном объёме данных работает изглючительно неторопливо, но ведь работает же... Концепт. :gigi:

Alex Dark 28.09.2013 20:31

Цитата:

Сообщение от Borland (Сообщение 1772379)
А вообще форму для заполнения таблички в M$ Excel обычно принято в самом же Excel и лепить.

Поддерживаю.
Вместо того что бы городить огород с таблицами в дельфе, проще выгрузить данные просто в текстовик, по формату.
Далее из экселя грузишь файл макросом и раскидываешь так как тебе надо.

Я сам так делал не раз и не только в эксель, но и в 1с.


Часовой пояс GMT +4, время: 06:17.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.