Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 08.01.2016, 18:07
Arip Arip вне форума
Прохожий
 
Регистрация: 08.01.2016
Сообщения: 1
Версия Delphi: Delphi xe10
Репутация: 10
По умолчанию Сохранение по верх старого файла

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


Код:
unit Unit3;
 
interface
 
uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, ComObj, Vcl.Grids, Vcl.StdCtrls;
 
type
  TForm3 = class(TForm)
    Button1: TButton;
    OpenDialog1: TOpenDialog;
    Button2: TButton;
    SaveDialog1: TSaveDialog;
    StringGrid1: TStringGrid;
    Memo1: TMemo;
    Memo2: TMemo;
    Memo3: TMemo;
    Memo4: TMemo;
    Memo5: TMemo;
    Memo6: TMemo;
    Memo7: TMemo;
    Memo8: TMemo;
    Memo9: TMemo;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form3: TForm3;
 
implementation
 
{$R *.dfm}
 procedure Xlsx_Open(XLSxFile:string; Grid:TStringGrid);
 const
  xlCellTypeLastCell = $0000000B;
var
  ExlApp, Sheet: OLEVariant;
  i, j, r, c:integer;
 
begin
  //создаем объект Excel
  ExlApp := CreateOleObject('Excel.Application');
 
  //делаем окно Excel невидимым
  ExlApp.Visible := true;
 
  //открываем файл XLSFile
  ExlApp.Workbooks.Open(XLSxFile);
 
  //создаем объект Sheet(страница) и указываем номер листа (1)
  //в книге, с которого будем осуществлять чтение
  Sheet := ExlApp.Workbooks[ExtractFileName(XLSxFile)].WorkSheets[1];
 
  //активируем последнюю ячейку на листе
  Sheet.Cells.SpecialCells(xlCellTypeLastCell, EmptyParam).Activate;
 
    // Возвращает номер последней строки
    r := ExlApp.ActiveCell.Row;
 
    // Возвращает номер последнего столбца
    c := ExlApp.ActiveCell.Column;
 
    //устанавливаем кол-во столбцов и строк в StringGrid
    Grid.RowCount:=r;
    Grid.ColCount:=c;
 
    //считываем значение из каждой ячейки и копируем в нашу таблицу
     for j:= 1 to r do
       for i:= 1 to c do
         Grid.Cells[i-1,j-1]:= sheet.cells[j,i];
        //если необходимо прочитать формулы то
       //Grid.Cells[i-1,j-1]:= sheet.cells[j,i].formula;
 
 //закрываем приложение Excel
 ExlApp.Quit;
 
 //очищаем выделенную память
 ExlApp := Unassigned;
 Sheet := Unassigned;
 
end;
 
procedure TForm3.Button1Click(Sender: TObject);
begin
   If OpenDialog1.Execute then Xlsx_Open (OpenDialog1.FileName, StringGrid1);
end;
 
 
 
procedure Xlsx_Save(XLSxFile:string; Grid:TStringGrid);
const
       xlExcel9795 = $0000002B;
       xlExcel8 = 56;
var
  ExlApp, Sheet: OLEVariant;
  i, j, r, c:integer;
 
begin
  //создаем объект Excel
   ExlApp := CreateOleObject('Excel.Application');
 
  //делаем окно Excel невидимым
  ExlApp.Visible := false;
 
  //создаем книгу для экспорта
  ExlApp.Workbooks.Add;
 
 
  //создаем объект Sheet(страница) и указываем номер листа (1)
  //в книге, в который будем осуществлять экспорт
  Sheet := ExlApp.Workbooks[1].WorkSheets[1];
 
  //задаем имя листу
  Sheet.name:='Данные_из_Delphi';
 
    //считываем кол-во столбцов и строк в StringGrid
    r:=Grid.RowCount;
    c:=Grid.ColCount;
 
    //считываем значение из каждой ячейки и отправляем в таблицу Excel
     for j:= 1 to r do
       for i:= 1 to c do
         sheet.cells[j,i]:=Grid.Cells[i-1,j-1];
 
    //отключаем все предупреждения Excel
     ExlApp.DisplayAlerts := False;
 
    //обработка исключения при сохраннении файла
    try
       //формат xls 97-2003 если установлен 2003 Excel
       ExlApp.Workbooks[1].SaveAs(XLSxFile, xlExcel9795);
       showmessage('Файл сохранил 2003-ий офис');
    except
      //формат xls 97-2003 если установлен 2007-2010 Excel
      ExlApp.Workbooks[1].SaveAs(XLSxFile, xlExcel8);
      showmessage('Файл сохранил 2007 или 2010-ый офис');
    end;
 
 //закрываем приложение Excel
 ExlApp.Quit;
 
 //очищаем выделенную память
 ExlApp := Unassigned;
 Sheet := Unassigned;
 
end;
 
 
procedure TForm3.Button2Click(Sender: TObject);
begin
 If SaveDialog1.Execute then Xlsx_Save (SaveDialog1.FileName+'.xls', StringGrid1);
end;
 
end.
Ответить с цитированием
  #2  
Старый 10.01.2016, 01:56
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

А что мешает перед сохранением удалить старый?
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 08:56.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter