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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 14.02.2010, 11:34
Аватар для Dead_Gigabit
Dead_Gigabit Dead_Gigabit вне форума
Начинающий
 
Регистрация: 20.10.2009
Адрес: Там где холодно и сыро.... брр
Сообщения: 135
Версия Delphi: Delphi XE
Репутация: 10
Вопрос Редактирование Excel файла с последущим сохранением

Всем здраствуйте, я новичок передомной стоит такая задача: есть фаилик с расширением .xls который запонен всеми необходимыми данными, но в нем постоянно меняються 4 ячейки, необходимо, с помщью проги их изменять и сохранять в файле, Полазел в инете нашел подходящий код, но что то не так :
Код:
procedure TForm1.Button4Click(Sender: TObject);
var
 XL, WB, Sheet : Variant;
begin
 XL := CreateOLEObject('Excel.Application');
 XL.Application.EnableEvents := false;
 WB := XL.Workbooks.Add('C:\ARB\Doc\WorkBook.xls');
Sheet := WB.ActiveSheet;
  
DateTimePicker1.date:= Sheet.Cells[4, 1];
Edit1.Text:= Sheet.Cells[12, 91];
Edit2.Text:= Sheet.Cells[15, 20];
Edit3.Text:= heet.Cells[19, 91];

XL.Quit;
end;
Admin: Не забываем про теги!

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

Последний раз редактировалось Admin, 14.02.2010 в 13:51.
Ответить с цитированием
  #2  
Старый 14.02.2010, 12:35
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Если я правильно понял, то изменение должно происходить в эксельном файле, а вы делаете наоборот, надо так:
Код:
Sheet.Cells[12, 91] := Edit1.Text;
Sheet.Cells[15, 20] := Edit2.Text;
Sheet.Cells[19, 91] := Edit3.Text;
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #3  
Старый 14.02.2010, 13:56
Аватар для Dead_Gigabit
Dead_Gigabit Dead_Gigabit вне форума
Начинающий
 
Регистрация: 20.10.2009
Адрес: Там где холодно и сыро.... брр
Сообщения: 135
Версия Delphi: Delphi XE
Репутация: 10
По умолчанию

При таком коде у меня, Edit1, Edit2,Edit3, принимают значения ячеек в файле, а мне нужно наоборот что-бы в файле, значения ячеек менялись на те что будут прописываться в проге пользователем, что бы постоянно не открывать этот фаил и не искать эти ячейки, фаил тостаточно большой....
Ответить с цитированием
  #4  
Старый 14.02.2010, 14:17
Аватар для Dead_Gigabit
Dead_Gigabit Dead_Gigabit вне форума
Начинающий
 
Регистрация: 20.10.2009
Адрес: Там где холодно и сыро.... брр
Сообщения: 135
Версия Delphi: Delphi XE
Репутация: 10
По умолчанию

Проблема решилась, переносом файла в корень диска С:\ , но появилась другая, почемуто прога открывает фаил с именем WorkBook1, хотя везде явным образом указан фаил, WorkBook, не поиму в чем причина, просмотрел весь код, вроде все везде указанно верно, подскажите плиз и второй вопрос как сохранить изменения в фаиле....
Ответить с цитированием
  #5  
Старый 15.02.2010, 10:57
Аватар для Dead_Gigabit
Dead_Gigabit Dead_Gigabit вне форума
Начинающий
 
Регистрация: 20.10.2009
Адрес: Там где холодно и сыро.... брр
Сообщения: 135
Версия Delphi: Delphi XE
Репутация: 10
По умолчанию

Скорей всего причина, в том что, прога открывает Excel не закрыв его, так как в при сообытии Form.Create прога обращаеться к файлу что бы проверить какие данные уже там загруженны и вывести в StrigGrid после этого деспетчре задач висит по 5- процессов Excel, но почему тогда он их не закрывает ведь прописанно же в коде XL.Quit. Код проги прикладываю на всякий...
Вложения
Тип файла: txt Code.txt (9.6 Кбайт, 22 просмотров)

Последний раз редактировалось Dead_Gigabit, 15.02.2010 в 11:05.
Ответить с цитированием
  #6  
Старый 15.02.2010, 11:05
Аватар для Ultras
Ultras Ultras вне форума
Начинающий
 
Регистрация: 09.02.2010
Адрес: Россия / Ставрополь
Сообщения: 138
Репутация: 475
По умолчанию

Код:
var
e_app,worksht: Variant;
f_name: string;
begin
  f_name := 'c:\123.xls';
  e_app := CreateOleObject('Excel.Application');
  e_app.DisplayAlerts := False;
  e_app.WorkBooks.Open(f_name);
  worksht := e_app.WorkBooks[1].WorkSheets[1];
  worksht.Cells[1,1] := '123'; //пример
  worksht.SaveAs('c:\out.xls');
  e_app.Quit;
end;

вот так я когда то делал, попробуйте.

Последний раз редактировалось Ultras, 15.02.2010 в 11:07.
Ответить с цитированием
  #7  
Старый 15.02.2010, 14:19
Аватар для Dead_Gigabit
Dead_Gigabit Dead_Gigabit вне форума
Начинающий
 
Регистрация: 20.10.2009
Адрес: Там где холодно и сыро.... брр
Сообщения: 135
Версия Delphi: Delphi XE
Репутация: 10
По умолчанию

А как сделатиь что бы сохранялся, в тот же фаил, а не в другой и как мне можно избавиться от стальки процессов Excel в памяти...
Ответить с цитированием
  #8  
Старый 15.02.2010, 15:16
Аватар для Ultras
Ultras Ultras вне форума
Начинающий
 
Регистрация: 09.02.2010
Адрес: Россия / Ставрополь
Сообщения: 138
Репутация: 475
По умолчанию

Цитата:
Сообщение от Dead_Gigabit
А как сделатиь что бы сохранялся, в тот же фаил, а не в другой и как мне можно избавиться от стальки процессов Excel в памяти...
чтобы сохранялось в тот же файл, это:
Код:
worksht.SaveAs('c:\out.xls');
заменить на это помоему:
Код:
worksht.Save;

на счет процессов не знаю, после сохранения файла, закрываецца Excel, процесс должен тоже убивацца, видимо у вас до закрытия не доходит...
Ответить с цитированием
  #9  
Старый 15.02.2010, 16:45
Аватар для Dead_Gigabit
Dead_Gigabit Dead_Gigabit вне форума
Начинающий
 
Регистрация: 20.10.2009
Адрес: Там где холодно и сыро.... брр
Сообщения: 135
Версия Delphi: Delphi XE
Репутация: 10
По умолчанию

Вот что получилось, указал куда иму выводить
код:
Код:
procedure TForm1.Button4Click(Sender: TObject);
var
 XL, WB, Sheet : Variant;
begin
 XL := CreateOLEObject('Excel.Application');
 XL.Application.EnableEvents := false;
 WB := XL.Workbooks.Open('F:\ARB\Doc\WorkBook.xls');
Sheet := WB.ActiveSheet;
Sheet.Cells[4, 1]:= DateTimePicker1.Date;
Sheet.Cells[12, 91]:=Edit1.Text;
Sheet.Cells[15, 20]:=Edit2.Text;
Sheet.Cells[19, 91]:=Edit3.Text;
XL.Save ('F:\ARB\Doc\WorkBook.xls');
XL.visible:=false;
XL.Ouit;
Админ: Где теги? Не забываем про оформление, иначе последуют санкции!

На что выходит 2 проблемы: он спрашивает куда сохронять и под каким именеи потому что прога открывает фаил WorkBook.xls под именем WorkBook1.xls с тем же содержимым, скорей всего что эти процессы Excel запущенные в памяти мешают открыть ему родной фаил WorkBook.xls так же при сохранении выскакивает ошибка, типа документ открыт тока для чтения, думаю тоже из-за этих процессов, подскажите как дальше быть...

Последний раз редактировалось Admin, 21.01.2011 в 14:19.
Ответить с цитированием
  #10  
Старый 21.01.2011, 10:46
forenheith forenheith вне форума
Прохожий
 
Регистрация: 15.01.2010
Сообщения: 3
Репутация: 10
По умолчанию

При помощи этой функции например. В Form Create добавить KillTask('EXCEL.EXE');

Код:
{ Функция удаления процесса по имени }
function TForm1.KillTask(ExeFileName: string): integer;
const
  PROCESS_TERMINATE = $0001;
var
  ContinueLoop: BOOL;
  FSnapshotHandle: Thandle;
  FProcessEntry32: TprocessEntry32;
begin
  result := 0;
  FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  FProcessEntry32.dwSize := sizeof(FProcessEntry32);
  ContinueLoop := Process32First(FSnapshotHandle, FProcessEntry32);

  while integer(ContinueLoop) <> 0 do
  begin
    if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) = UpperCase
          (ExeFileName)) or (UpperCase(FProcessEntry32.szExeFile) = UpperCase
          (ExeFileName))) then
      result := integer(TerminateProcess(OpenProcess(PROCESS_TERMINATE,
            BOOL(0), FProcessEntry32.th32ProcessID), 0));
    ContinueLoop := process32next(FSnapshotHandle, FProcessEntry32);
  end;

  closehandle(FSnapshotHandle);
end;
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

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

ВКонтакте   Facebook   Twitter