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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.05.2016, 01:24   #1
SolovejK
Пользователь
 
Регистрация: 27.01.2010
Сообщений: 52
По умолчанию XML + Excel

Подскажите что в коде не правильно.
По задумке должен грузить в цикле данные из XML файлов в Excel. Грузит только первую строчку, а дальше вываливает Access violation.

Код:
procedure TForm1.LoadXmlBtnClick(Sender: TObject);
var
  searchresult : TSearchRec;
  i  : SmallInt;
  text: string;
  xml: TXMLDocument;
  XL: Variant;
begin
  XL := CreateOLEObject('Excel.Application');
  XL.WorkBooks.Open(ExtractFilePath(Application.ExeName)+ 'book.xlsx');
  XL.visible := true;
  i := 0;
  xml := TXMLDocument.Create(nil);
  if FindFirst(ExtractFilePath(Application.ExeName) +'\111\'+ '*.xml',faAnyFile,searchresult)=0
  then
  begin
    repeat
     	XL.WorkBooks[1].WorkSheets[1].Cells[i+4,2].Value:= searchresult.Name;
      	try
        xml.Active := True;
        xml.LoadFromFile(ExtractFilePath(Application.ExeName) +'\111\'+ searchresult.Name);
        text := xml.DocumentElement.ChildNodes['info'].ChildNodes[2].ChildNodes[0].Text;
        XL.WorkBooks[1].WorkSheets[1].Cells[i+4,4].Value:=text;

      	except
        XL.WorkBooks[1].WorkSheets[1].Cells[i+4,4].Value:='неизвестно';
      	end;
      xml.Active := False;
      xml := nil;
      i:=i+1;
    until
      FindNext(searchresult) <> 0;
      FindClose(searchresult);

      xml.Free;
  end;
end;
SolovejK вне форума Ответить с цитированием
Старый 15.05.2016, 01:01   #2
SolovejK
Пользователь
 
Регистрация: 27.01.2010
Сообщений: 52
По умолчанию

Вот так все работает:
Код:
procedure TForm1.LoadXmlBtnClick(Sender: TObject);
var
  searchresult : TSearchRec;
  i  : SmallInt;
  text: string;
  xml: TXMLDocument;
  XL: Variant;
begin
  XL := CreateOLEObject('Excel.Application');
  XL.WorkBooks.Open(ExtractFilePath(Application.ExeName)+ 'book.xlsx');
  XL.visible := true;
  i := 0;
  if FindFirst(ExtractFilePath(Application.ExeName) +'\111\'+ '*.xml',faAnyFile,searchresult)=0
  then
  begin
    repeat
     	XL.WorkBooks[1].WorkSheets[1].Cells[i+4,2].Value:= searchresult.Name;
      	try
        xml := TXMLDocument.Create(nil);
        xml.LoadFromFile(ExtractFilePath(Application.ExeName) +'\111\'+ searchresult.Name);
        text := xml.DocumentElement.ChildNodes['info'].ChildNodes[2].ChildNodes[0].Text;
        XL.WorkBooks[1].WorkSheets[1].Cells[i+4,4].Value:=text;
        xml := nil;
      	except
        XL.WorkBooks[1].WorkSheets[1].Cells[i+4,4].Value:='неизвестно';
      	end;


      i:=i+1;
    until
      FindNext(searchresult) <> 0;
      FindClose(searchresult);

      xml.Free;
  end;
end;
SolovejK вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
xml выгрузить в excel otmarozok87 Общие вопросы Delphi 11 10.06.2014 12:08
Xml в Excel с Макросом WhiteLion Microsoft Office Excel 4 02.07.2013 21:57
Excel и XML a6a Microsoft Office Excel 3 16.12.2009 10:25
Excel и XML S_Yevgeniy Microsoft Office Excel 10 12.12.2009 13:09
Excel в xml, прошу помощи CaH4oo Microsoft Office Excel 4 20.12.2008 09:31