Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.07.2009, 16:29   #1
monushka
Форумчанин
 
Аватар для monushka
 
Регистрация: 26.10.2007
Сообщений: 112
Вопрос СОХРАНЕНИЕ данных из StringGrid в Excel

Здравствуйте, форумчане!

Прошу помощи в решении следующей проблемы.
На форме имеется таблица StringGrid, состоящая из нескольких сотен строк и 6 столбцов. Также есть Edit1, в который вводится имя файла. Нужно организовать возможность сохранения данных из этой таблицы в Excel.

А именно, при нажатии на кнопку "Сохранить" данные из СтрингГрида должны вывестись на лист книги Excel, а затем эта книга должна сохраниться в директорию с программой с названием, которое введено в Edit1.

Морочилась я с SaveDialog'ом, потом до меня дошло, что с его помощью это не организую (либо я просто не понимаю, как это сделать). Ибо окно "Сохранить как..." не должно появляться. Пользователь не должен ни как учавствовать в процессе сохранения. Его задача только ввести имя файла (без расширения) в Эдит, заполнить таблицу и нажать кнопку "Сохранить". Все остальное (путь сохранения, расширение и т.д.) должно совершаться без его участия.

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

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

Заранее спасибо!
If you wanna make the world a better place take a look at yourself and then make a change!
monushka вне форума Ответить с цитированием
Старый 16.07.2009, 20:44   #2
Daramant
Форумчанин
 
Регистрация: 06.01.2009
Сообщений: 340
По умолчанию

Это можно сделать вот так:
Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    StringGrid1: TStringGrid;
    Edit1: TEdit;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }

    function GetExcelFileName: String;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

uses
  ComObj;

const
  EXCEL_FILE_EXT = '.xls';

function TForm1.GetExcelFileName: String;
begin
  Result := ExtractFilePath(Application.ExeName) + Edit1.Text;

  if LowerCase(ExtractFileExt(Result)) <> EXCEL_FILE_EXT then
    Result := Result + EXCEL_FILE_EXT;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
 ExcelApp, Sheet: variant;
 Col, Row: Word;
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(GetExcelFileName);

    ShowMessage('Ok!');
  finally
    ExcelApp.Application.Quit;
    ExcelApp := unassigned;
  end;
end;

end.
Истинный успех – это то, что Вы сделали в сравнении с тем, что могли бы сделать.
Никогда не бойся делать то, что ты не умеешь. Помни, ковчег был построен любителем. Профессионалы построили "Титаник".
Daramant вне форума Ответить с цитированием
Старый 17.07.2009, 09:35   #3
monushka
Форумчанин
 
Аватар для monushka
 
Регистрация: 26.10.2007
Сообщений: 112
По умолчанию

Супер! Спасибо, разобралась, все работает!
А то меня хватило только на возможность сохранения с определенным именем...

Не нужно зря цитировать предыдущее сообщение! Это - флуд.
Рекомендую. Помимо общих правил форума есть и дополнения к ним в каждом разделе...
А кроме кнопки "Цитата" внизу есть простое окно для ввода своего сообщения.
Или маленькая кнопочка "Быстрый ответ" справа от кнопки "Цитата".
Попадаете туда же.
Модератор
If you wanna make the world a better place take a look at yourself and then make a change!

Последний раз редактировалось mihali4; 01.12.2010 в 01:20.
monushka вне форума Ответить с цитированием
Старый 01.12.2010, 01:17   #4
alexnike
 
Регистрация: 22.11.2010
Сообщений: 5
По умолчанию Полное завершение процесса EXCEL

Для полного завершения процесса и освобождения памяти в блоке finally надо дописать Sheet := Unassigned иначе хвосты MS EXcel будут висеть в памяти.
alexnike вне форума Ответить с цитированием
Старый 17.05.2012, 18:56   #5
Gulden
 
Регистрация: 17.05.2012
Сообщений: 3
По умолчанию

Здравствуйте!! Помогите пожалуйста, как сделать экспорт из striggrid в excel, чтобы мы сами задавали адрес и имя, и можно было выбирать ячейки в стринггриде и вставлять в определенные ячейки в екселе. Плиииз!!!!
Gulden вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Автоматическое сохранение + Печать. Продолжение темы "Перенос данных из Excel в Word" The_Andrei Microsoft Office Word 15 23.06.2009 23:46
Сохранение имен столбцов при импорте данных из Delphi в Excel an4ik Общие вопросы Delphi 3 07.03.2009 15:23
Сохранение Stringgrid c ColorBOX mazdakilla Компоненты Delphi 3 12.05.2008 17:05
Сохранение StringGrid, создание .ini! Nemesisking Общие вопросы Delphi 5 24.09.2007 08:23