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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.02.2008, 12:37   #21
monushka
Форумчанин
 
Аватар для monushka
 
Регистрация: 26.10.2007
Сообщений: 112
По умолчанию

_Dmitry, спасибо! Все классно работает!
У меня еще такая проблема... Если после пработы программы открыть Диспетчер задач, то видно, что все документы Excel, которые открывались, работают. Хотелось бы сделать так, чтобы при закрытии программы все открытые документы закрывалмсь вместе с ней. Я пробовала WorkBook.Close, но что-то оно вообще никак не реагирует на это... Подскажите, пожалуйста, как можно это исправить?
Пробовала E.ActiveSheets.Close; но так вообще прога вылетает...
Хотела сделать с сообщением:
Код:
if Application.MessageBox('Вы действительно хотите выйти?'+#13+'Все несохраненные данные будут потеряны!','Выход',MB_OKCANCEL)=IDOK  then
begin
 Action:=caFree;
 E.ActiveSheets.Close;
 end
  else
   Action:=caNone;
Но так после появления сообщения программа тоже вылетает... Вот.
If you wanna make the world a better place take a look at yourself and then make a change!
monushka вне форума Ответить с цитированием
Старый 02.02.2008, 15:51   #22
_Dmitry
Участник клуба
 
Аватар для _Dmitry
 
Регистрация: 02.09.2007
Сообщений: 1,193
По умолчанию

Код:
//Сохраняйте все рабочие книги
E.WorkBooks.Item[1].SaveAs('file.xls');
//Закрывайте их
E.WorkBooks.Item[1].Close;
//Освобождайте память
E:=UnAssigned;

//Можно сразу закрыть Excel полностью
E.Quit;
//но перед этим нужно также сохранить все рабочие книги
_Dmitry вне форума Ответить с цитированием
Старый 08.02.2008, 23:37   #23
monushka
Форумчанин
 
Аватар для monushka
 
Регистрация: 26.10.2007
Сообщений: 112
По умолчанию

Сделала так:
Код:
for i:=1 to SG1.RowCount do
for j:=1 to SG1.ColCount do
E.ActiveSheet.Cells[i,j].Value:=SG1.Cells[j-1,i-1];
 if not SaveDialog1.Execute then exit;
 E.ActiveSheet.SaveAs(FileName:=SaveDialog1.FileName);
 ShowMessage('Изменения сохранены!');
Получилось SaveAs... А как сделать просто Save, если я из StringGrid'а должна данные сначала в Excel кинуть (в тот документ, который был открыт), а потом уже сохранить сам экселевский документ... При этом не должно вводится имя файла! Изменения должны сохраниться в тот же документ, который был открыт и который, соответственно, был отредактирован. Вот такая проблема...
Спасибо за внимание и понимание ))
P.S.: Excel при этом запущен в фоновом режиме.
If you wanna make the world a better place take a look at yourself and then make a change!

Последний раз редактировалось monushka; 08.02.2008 в 23:39.
monushka вне форума Ответить с цитированием
Старый 09.02.2008, 09:23   #24
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от monushka Посмотреть сообщение
E.ActiveSheet.SaveAs(FileName:=Save Dialog1.FileName);
Получилось SaveAs... А как сделать просто Save
А попробуйте вместо этой строчки (с SaveAs)
написать так:
E.WorkBooks.Save;
Serge_Bliznykov вне форума Ответить с цитированием
Старый 09.02.2008, 09:37   #25
monushka
Форумчанин
 
Аватар для monushka
 
Регистрация: 26.10.2007
Сообщений: 112
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
А попробуйте вместо этой строчки (с SaveAs)
написать так:
E.WorkBooks.Save;
Так не получается... Прога запускается, но вылетает потом...Мне кажется проблема в отправке данных из StringGrid'а... Я их закидываю в Excel, но по всей видимости не в тот документ, который открыт, а в новый. А мне нужно в тот, который был открыт... Но я не знаю как это сделать...
If you wanna make the world a better place take a look at yourself and then make a change!
monushka вне форума Ответить с цитированием
Старый 09.02.2008, 13:38   #26
_Dmitry
Участник клуба
 
Аватар для _Dmitry
 
Регистрация: 02.09.2007
Сообщений: 1,193
По умолчанию

E.WorkBooks.Item[1].Save;
так должно работать, сохраняйте каждую рабочую книгу по отдельности
_Dmitry вне форума Ответить с цитированием
Старый 09.02.2008, 16:02   #27
monushka
Форумчанин
 
Аватар для monushka
 
Регистрация: 26.10.2007
Сообщений: 112
По умолчанию

Сделала такЖ
Код:
for i:=1 to SG1.RowCount do
for j:=1 to SG1.ColCount do
E.ActiveSheet.Cells[i,j].Value:=SG1.Cells[j-1,i-1];
E.WorkBooks.Item[1].Save;
ShowMessage('Изменения сохранены!');
Прога запустилась, работает... Но! Сохраняет открытый документ в том же виде (первоначальном) в папку Мои документы! Т.е. изменения так и остаются не сохраненными...
If you wanna make the world a better place take a look at yourself and then make a change!
monushka вне форума Ответить с цитированием
Старый 10.02.2008, 11:49   #28
_Dmitry
Участник клуба
 
Аватар для _Dmitry
 
Регистрация: 02.09.2007
Сообщений: 1,193
По умолчанию

Может у вас одновременно открыто нескольно рабочих книг (может одна и та же несколько раз), данные вы пишите в активную, а сохраняете первую. Активная может быть и не первой.
_Dmitry вне форума Ответить с цитированием
Старый 28.10.2009, 16:33   #29
monushka
Форумчанин
 
Аватар для monushka
 
Регистрация: 26.10.2007
Сообщений: 112
По умолчанию

Опять столкнулась с записью данных из StringGrid'а в Excel. Теперь вопрос в том, как выделить диапазон ячеек в Excel'е, если заранее неизвестно, сколько строк у StringGrid'а.

Код:
E:=CreateOleObject('Excel.Application');
E.WorkBooks.Add;
E.Visible:=true;
E.ActiveSheet.PageSetup.Orientation:= 2;
E.ActiveWorkbook.WorkSheets[1].Columns[1].ColumnWidth:= 20;
E.ActiveWorkbook.WorkSheets[1].Columns[2].ColumnWidth:= 13;
E.ActiveWorkbook.WorkSheets[1].Columns[3].ColumnWidth:= 25;
E.ActiveWorkbook.WorkSheets[1].Columns[4].ColumnWidth:= 30;
E.ActiveWorkbook.WorkSheets[1].Columns[5].ColumnWidth:= 6;
E.ActiveWorkbook.WorkSheets[1].Columns[6].ColumnWidth:= 13;
E.ActiveWorkbook.WorkSheets[1].Columns[7].ColumnWidth:= 10;
E.ActiveWorkbook.WorkSheets[1].Columns[8].ColumnWidth:= 10;
E.WorkBooks[1].WorkSheets[1].Rows[1].Font.Bold := True;
for i:=1 to SG1.RowCount do begin
E.WorkBooks[1].WorkSheets[1].Rows[i].Font.Name := 'Times New Roman';
E.WorkBooks[1].WorkSheets[1].Rows[i].Font.Size := 11;
end;
E.ActiveWorkBook.WorkSheets[1].Range['A1:H1'].Select;
E.Selection.HorizontalAlignment:=-4108; //выравнивание по центру
E.Selection.Borders.LineStyle:=1;  //показываем границы ячеек
E.Selection.Borders.Weight:=2;   //стиль границ
E.Selection.WrapText:=true;      //перенос по словам
for i:=1 to SG1.RowCount do
for j:=1 to SG1.ColCount do
E.ActiveSheet.Cells[i,j].Value:=SG1.Cells[j-1,i-1];
E.ActiveSheet.Cells[SG1.RowCount+3,5]:='Итого: ';
E.ActiveSheet.Cells[SG1.RowCount+3,6]:=Edit1.Text;
Как выделить диапазон, если размеры таблицы заранее не известны? Известно только количество столбцов, количество строк разное.
If you wanna make the world a better place take a look at yourself and then make a change!
monushka вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Borland C++ Builder - импорт из Excel в StringGrid nuser C++ Builder 3 10.01.2015 12:38
из StringGrid в Excel artemavd Общие вопросы Delphi 6 24.07.2008 18:14
Excel и StringGrid... Roof Общие вопросы Delphi 2 18.09.2007 17:07
Delphi(Stringgrid) подскажите zzzzz Помощь студентам 1 14.07.2007 11:51
Excel и StringGrid apx_angel Компоненты Delphi 2 20.02.2007 00:20