Документация HotXLS

Классы TXLSXExternalLink / TXLSXExternalLinks

Коллекция ссылок на внешние рабочие книги на уровне рабочей книги (часть OOXML externalLinks ). Каждый элемент описывает один связанный файл .xlsx по его целевому URL и необязательному списку имён листов из кэшированных метаданных внутри части ссылки. Коллекция находится в TXLSXWorkbook.ExternalLinks. Объявлено в lxHandleX

Объявление TXLSXExternalLink

type
  TXLSXExternalLink = class
    constructor Create(const ATarget: WideString);
    destructor Destroy; override;
    property Target: WideString;
    property SheetNames: TStringList;
  end;
      

Члены TXLSXExternalLink

TargetURL внешней рабочей книги, на которую идёт ссылка. Для книги в том же каталоге используйте относительный путь, например '../Reports/Sales.xlsx'; для сетевого расположения используйте полный UNC или file URI. SaveAs записывает это без изменений как target связи и в xl/externalLinks/externalLinkN.xml.rels '../Reports/Sales.xlsx'; для сетевого расположения используйте полный UNC или file URI. SaveAs записывает это дословно как цель связи и в xl/externalLinks/externalLinkN.xml.rels
SheetNamesНеобязательный список имён листов внутри внешней книги. При заполнении SaveAs выводит дочерние элементы <sheetNames> внутри элемента <externalBook> элемент, чтобы Excel мог разрешать межкнижные ссылки, не открывая связанный файл. Заполняется автоматически через Open , чтобы Excel мог разрешать перекрёстные ссылки между книгами без открытия связанного файла. При открытии существующей книги Open заполняет его автоматически при обратном преобразовании. Оставьте пустым при создании ссылки с нуля; Excel разрешит имена листов при следующем открытии внешнего файла

Объявление TXLSXExternalLinks

type
  TXLSXExternalLinks = class
    constructor Create;
    destructor Destroy; override;
    function Add(const ATarget: WideString): TXLSXExternalLink;
    function IndexOfTarget(const ATarget: WideString): Integer;
    function FindByTarget(const ATarget: WideString): TXLSXExternalLink;
    function DeleteByTarget(const ATarget: WideString): Boolean;
    procedure Delete(Index: Integer);
    procedure Clear;
    property Count: Integer;
    property Items[Index: Integer]: TXLSXExternalLink; default;
  end;
      

Члены TXLSXExternalLinks

Add(Target)Добавляет новую внешнюю ссылку с заданным целевым URL и возвращает новый экземпляр TXLSXExternalLink. Заполните SheetNames в возвращенном объекте, если они известны TXLSXExternalLink instance. Populate SheetNames on the returned object if known
IndexOfTarget / FindByTargetНаходит первую внешнюю ссылку на книгу, у которой Target совпадает с запрошенным путём или URL. Сравнение без учёта регистра
DeleteByTarget / Delete / ClearНаходит первую ссылку на внешнюю книгу, у которой Target совпадает с запрошенным путём или URL. Сопоставление нечувствительно к регистру
Count / Items[Index]удалить один link через target, удалить один link через 0-основанный индекс, или clear whole коллекция Items Проверяет внешние ссылки по нулевому индексу. Items является свойством по умолчанию

Поведение SaveAs / Open

Когда Workbook.ExternalLinks.Count > 0, SaveAs формирует:
  • Блок <externalReferences> в xl/workbook.xml с одним <externalReference r:id="rIdN"/> на ссылку
  • Запись зависимости в xl/_rels/workbook.xml.rels , указывающую на externalLinks/externalLinkN.xml
  • xl/externalLinks/externalLinkN.xml , содержащий элемент <externalBook> с целевой зависимостью и необязательными <sheetNames>
  • xl/externalLinks/externalLinkN.xml.rels with the actual Target с фактическим целевым URL
Open сохраняет при round-trip Target и SheetNames; кэшированные значения ячеек внутри <sheetDataSet> в текущей версии не сохраняются

Пример

var
  wb: TXLSXWorkbook;
  link: TXLSXExternalLink;
begin
  wb := TXLSXWorkbook.Create;
  try
    link := wb.ExternalLinks.Add('../Data/Source.xlsx');
    link.SheetNames.Add('Sheet1');
    link.SheetNames.Add('Sheet2');
    wb.Sheets.Add('Report');
    wb.Sheets[0].Cells.Item[1, 1].Formula :=
      '[Source.xlsx]Sheet1!$A$1';
    wb.SaveAs('report.xlsx');
  finally
    wb.Free;
  end;
end;
    

См. также