Documentación de HotXLS

Clases TXLSXExternalLink / TXLSXExternalLinks

Colección a nivel de libro de trabajo de referencias externas a otros libros de trabajo (parte externalLinks de OOXML). Cada entrada describe un archivo .xlsx vinculado por su URL de destino y una lista opcional de nombres de hojas extraídos de los metadatos en caché dentro de la parte del vínculo. La colección se ubica en TXLSXWorkbook.ExternalLinks. Declarado en lxHandleX

Declaración de TXLSXExternalLink

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

Miembros de TXLSXExternalLink

TargetURL del libro externo referenciado. Para un libro en el mismo directorio use una ruta relativa como '../Reports/Sales.xlsx'; para una ubicación de red use una ruta UNC completa o un URI de archivo. SaveAs escribe esto literalmente como el destino de la relación y en xl/externalLinks/externalLinkN.xml.rels '../Reports/Sales.xlsx'; para una ubicación de red use una ruta UNC completa o un URI de archivo. SaveAs lo escribe textualmente como destino de la relación y dentro de xl/externalLinks/externalLinkN.xml.rels
SheetNamesLista opcional de nombres de hojas dentro del libro externo. Cuando se rellena, SaveAs emite hijos <sheetNames> dentro del elemento <externalBook> para que Excel pueda resolver referencias entre libros sin abrir el archivo vinculado. Se llena automáticamente con Open para que Excel pueda resolver referencias entre libros sin abrir el archivo vinculado. Open la rellena automáticamente al hacer round-trip de un libro existente. Déjala vacía al crear un vínculo desde cero; Excel resolverá los nombres de hoja la próxima vez que se abra el archivo externo

Declaración de 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;
      

Miembros de TXLSXExternalLinks

Add(Target)Agrega un nuevo vínculo externo con la URL de destino indicada y devuelve la nueva instancia de TXLSXExternalLink. Complete SheetNames en el objeto devuelto si los conoce TXLSXExternalLink instance. Populate SheetNames on the returned object if known
IndexOfTarget / FindByTargetLocaliza el primer vínculo de libro externo cuyo Target Ubica el primer vínculo a libro externo cuyo Target coincide con la ruta o URL solicitada. La coincidencia no distingue mayúsculas y minúsculas
DeleteByTarget / Delete / Cleareliminar uno link por target, eliminar uno link por 0-basado índice, o clear whole colección
Count / Items[Index]Inspeccionar external links por 0-basado índice. Items es default propiedad

Comportamiento de SaveAs / Open

Cuando Workbook.ExternalLinks.Count > 0, SaveAs emite:
  • Un bloque <externalReferences> en xl/workbook.xml con un <externalReference r:id="rIdN"/> por vínculo
  • Una entrada de relación en xl/_rels/workbook.xml.rels que apunta a externalLinks/externalLinkN.xml
  • xl/externalLinks/externalLinkN.xml que contiene el elemento <externalBook> con la relación de destino y los <sheetNames>
  • xl/externalLinks/externalLinkN.xml.rels con la URL real de Target URL
Open hace ida y vuelta con Target y SheetNames; los valores de celda en caché dentro de <sheetDataSet> no son preservados por la versión actual

Ejemplo

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;
    

Véase también