Коллекция ссылок на внешние рабочие книги на уровне рабочей книги (часть 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
| Target | URL внешней рабочей книги, на которую идёт ссылка. Для книги в том же каталоге используйте относительный путь, например '../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;
См. также