|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
Редактирование 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, 14.02.2010 в 13:51. |
#2
|
||||
|
||||
Если я правильно понял, то изменение должно происходить в эксельном файле, а вы делаете наоборот, надо так:
Код:
Sheet.Cells[12, 91] := Edit1.Text; Sheet.Cells[15, 20] := Edit2.Text; Sheet.Cells[19, 91] := Edit3.Text; Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#3
|
||||
|
||||
При таком коде у меня, Edit1, Edit2,Edit3, принимают значения ячеек в файле, а мне нужно наоборот что-бы в файле, значения ячеек менялись на те что будут прописываться в проге пользователем, что бы постоянно не открывать этот фаил и не искать эти ячейки, фаил тостаточно большой....
|
#4
|
||||
|
||||
Проблема решилась, переносом файла в корень диска С:\ , но появилась другая, почемуто прога открывает фаил с именем WorkBook1, хотя везде явным образом указан фаил, WorkBook, не поиму в чем причина, просмотрел весь код, вроде все везде указанно верно, подскажите плиз и второй вопрос как сохранить изменения в фаиле....
|
#5
|
||||
|
||||
Скорей всего причина, в том что, прога открывает Excel не закрыв его, так как в при сообытии Form.Create прога обращаеться к файлу что бы проверить какие данные уже там загруженны и вывести в StrigGrid после этого деспетчре задач висит по 5- процессов Excel, но почему тогда он их не закрывает ведь прописанно же в коде XL.Quit. Код проги прикладываю на всякий...
Последний раз редактировалось Dead_Gigabit, 15.02.2010 в 11:05. |
#6
|
||||
|
||||
Код:
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
|
||||
|
||||
А как сделатиь что бы сохранялся, в тот же фаил, а не в другой и как мне можно избавиться от стальки процессов Excel в памяти...
|
#8
|
||||
|
||||
Цитата:
Код:
worksht.SaveAs('c:\out.xls'); Код:
worksht.Save; на счет процессов не знаю, после сохранения файла, закрываецца Excel, процесс должен тоже убивацца, видимо у вас до закрытия не доходит... |
#9
|
||||
|
||||
Вот что получилось, указал куда иму выводить
код: Код:
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
|
|||
|
|||
При помощи этой функции например. В 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; |