You've already forked lazarus-ccr
fpspreadsheet: the xlsx writer now can write an image hyperlink.
git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@6672 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
@ -3977,6 +3977,9 @@ var
|
|||||||
roffs1, coffs1, roffs2, coffs2: Double;
|
roffs1, coffs1, roffs2, coffs2: Double;
|
||||||
x, y, w, h: Double;
|
x, y, w, h: Double;
|
||||||
descr: String;
|
descr: String;
|
||||||
|
hlink: String;
|
||||||
|
xdr_cNvPr: String;
|
||||||
|
rId: Integer;
|
||||||
book: TsWorkbook;
|
book: TsWorkbook;
|
||||||
sheet: TsWorksheet absolute AWorksheet;
|
sheet: TsWorksheet absolute AWorksheet;
|
||||||
begin
|
begin
|
||||||
@ -3995,6 +3998,7 @@ begin
|
|||||||
'xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main">');
|
'xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main">');
|
||||||
|
|
||||||
// Repeat for each image
|
// Repeat for each image
|
||||||
|
rId := 1;
|
||||||
for i:=0 to sheet.GetImageCount - 1 do
|
for i:=0 to sheet.GetImageCount - 1 do
|
||||||
begin
|
begin
|
||||||
img := sheet.GetImage(i);
|
img := sheet.GetImage(i);
|
||||||
@ -4008,6 +4012,24 @@ begin
|
|||||||
descr := ExtractFileName(book.GetEmbeddedObj(img.index).Filename);
|
descr := ExtractFileName(book.GetEmbeddedObj(img.index).Filename);
|
||||||
if descr = '' then descr := 'image';
|
if descr = '' then descr := 'image';
|
||||||
|
|
||||||
|
// This part defines the relationship to the graphic and, if available, to
|
||||||
|
// a hyperlink.
|
||||||
|
xdr_cNvPr := Format('id="%d" name="Graphic %d" descr="%s"', [i+3,i+2, descr]);
|
||||||
|
if img.HyperlinkTarget <> '' then begin
|
||||||
|
hlink := Format('<a:hlinkClick xmlns:r="%s" r:id="rId%d" ', [
|
||||||
|
SCHEMAS_DOC_RELS, rId
|
||||||
|
]);
|
||||||
|
inc(rId);
|
||||||
|
if img.HyperlinkToolTip <> '' then
|
||||||
|
hlink := hlink + Format('tooltip="%s" ', [img.HyperlinkToolTip]);
|
||||||
|
hlink := hlink + '/>';
|
||||||
|
|
||||||
|
xdr_cNvPr := '<xdr:cNvPr ' + xdr_cNvPr + '>' +
|
||||||
|
hlink +
|
||||||
|
'</xdr:cNvPr>';
|
||||||
|
end else
|
||||||
|
xdr_cNvPr := '<xdr:cNvPr ' + xdr_cNvPr + ' />';
|
||||||
|
|
||||||
AppendToStream(FSDrawings[FCurSheetNum],
|
AppendToStream(FSDrawings[FCurSheetNum],
|
||||||
'<xdr:twoCellAnchor editAs="oneCell">');
|
'<xdr:twoCellAnchor editAs="oneCell">');
|
||||||
AppendToStream(FSDrawings[FCurSheetNum], Format(
|
AppendToStream(FSDrawings[FCurSheetNum], Format(
|
||||||
@ -4033,13 +4055,13 @@ begin
|
|||||||
AppendToStream(FSDrawings[FCurSheetNum], Format(
|
AppendToStream(FSDrawings[FCurSheetNum], Format(
|
||||||
'<xdr:pic>'+
|
'<xdr:pic>'+
|
||||||
'<xdr:nvPicPr>'+
|
'<xdr:nvPicPr>'+
|
||||||
'<xdr:cNvPr id="%d" name="Grafik %d" descr="%s"/>'+ // 1, 2, orig file name
|
xdr_cNvPr +
|
||||||
'<xdr:cNvPicPr>'+
|
'<xdr:cNvPicPr>'+
|
||||||
'<a:picLocks noChangeAspect="1"/>'+
|
'<a:picLocks noChangeAspect="1"/>'+
|
||||||
'</xdr:cNvPicPr>'+
|
'</xdr:cNvPicPr>'+
|
||||||
'</xdr:nvPicPr>'+
|
'</xdr:nvPicPr>'+
|
||||||
'<xdr:blipFill>'+
|
'<xdr:blipFill>'+
|
||||||
'<a:blip xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" r:embed="rId%d" cstate="print"/>'+ // 1
|
'<a:blip xmlns:r="%s" r:embed="rId%d" cstate="print"/>'+
|
||||||
'<a:stretch>'+
|
'<a:stretch>'+
|
||||||
'<a:fillRect/>'+
|
'<a:fillRect/>'+
|
||||||
'</a:stretch>'+
|
'</a:stretch>'+
|
||||||
@ -4055,13 +4077,14 @@ begin
|
|||||||
'</xdr:spPr>'+
|
'</xdr:spPr>'+
|
||||||
'</xdr:pic>' +
|
'</xdr:pic>' +
|
||||||
'<xdr:clientData/>', [
|
'<xdr:clientData/>', [
|
||||||
i+2, i+1, descr,
|
// i + 3, i+2, descr,
|
||||||
i+1,
|
SCHEMAS_DOC_RELS, rId,
|
||||||
mmToEMU(x), mmToEMU(y),
|
mmToEMU(x), mmToEMU(y),
|
||||||
mmToEMU(w), mmToEMU(h)
|
mmToEMU(w), mmToEMU(h)
|
||||||
]));
|
]));
|
||||||
AppendToStream(FSDrawings[FCurSheetNum],
|
AppendToStream(FSDrawings[FCurSheetNum],
|
||||||
'</xdr:twoCellAnchor>');
|
'</xdr:twoCellAnchor>');
|
||||||
|
inc(rId, 1);
|
||||||
end;
|
end;
|
||||||
AppendToStream(FSDrawings[FCurSheetNum],
|
AppendToStream(FSDrawings[FCurSheetNum],
|
||||||
'</xdr:wsDr>');
|
'</xdr:wsDr>');
|
||||||
@ -4075,6 +4098,9 @@ var
|
|||||||
i: Integer;
|
i: Integer;
|
||||||
ext: String;
|
ext: String;
|
||||||
img: TsImage;
|
img: TsImage;
|
||||||
|
rId: Integer;
|
||||||
|
hlink, target, bookmark: String;
|
||||||
|
u: TURI;
|
||||||
sheet: TsWorksheet absolute AWorksheet;
|
sheet: TsWorksheet absolute AWorksheet;
|
||||||
begin
|
begin
|
||||||
if (sheet.GetImageCount = 0) then
|
if (sheet.GetImageCount = 0) then
|
||||||
@ -4089,14 +4115,35 @@ begin
|
|||||||
'<Relationships xmlns="' + SCHEMAS_RELS + '">' + LineEnding);
|
'<Relationships xmlns="' + SCHEMAS_RELS + '">' + LineEnding);
|
||||||
|
|
||||||
// Repeat for each image
|
// Repeat for each image
|
||||||
|
rId := 1;
|
||||||
for i:=0 to sheet.GetImageCount - 1 do
|
for i:=0 to sheet.GetImageCount - 1 do
|
||||||
begin
|
begin
|
||||||
img := sheet.GetImage(i);
|
img := sheet.GetImage(i);
|
||||||
|
|
||||||
|
if img.HyperlinkTarget <> '' then begin
|
||||||
|
SplitHyperlink(img.HyperlinkTarget, target, bookmark);
|
||||||
|
if (target <> '') and (pos('file:', target) = 0) then
|
||||||
|
begin
|
||||||
|
u := ParseURI(target);
|
||||||
|
if u.Protocol = '' then
|
||||||
|
target := '../' + target;
|
||||||
|
end;
|
||||||
|
if (bookmark <> '') then
|
||||||
|
target := target + '#' + bookmark;
|
||||||
|
|
||||||
|
AppendToStream(FSDrawingsRels[FCurSheetNum], Format(
|
||||||
|
' <Relationship Id="rId%d" Type="%s" Target="%s" TargetMode="External"/>' + LineEnding, [
|
||||||
|
rId, SCHEMAS_HYPERLINK, target
|
||||||
|
]));
|
||||||
|
inc(rId);
|
||||||
|
end;
|
||||||
|
|
||||||
ext := GetImageTypeExt((FWorkbook as TsWorkbook).GetEmbeddedObj(img.Index).Imagetype);
|
ext := GetImageTypeExt((FWorkbook as TsWorkbook).GetEmbeddedObj(img.Index).Imagetype);
|
||||||
AppendToStream(FSDrawingsRels[FCurSheetNum], Format(
|
AppendToStream(FSDrawingsRels[FCurSheetNum], Format(
|
||||||
' <Relationship Id="rId%d" Type="%s" Target="../media/image%d.%s"/>' + LineEnding, [
|
' <Relationship Id="rId%d" Type="%s" Target="../media/image%d.%s"/>' + LineEnding, [
|
||||||
i+1, SCHEMAS_IMAGE, img.Index+1, ext
|
rId, SCHEMAS_IMAGE, img.Index+1, ext
|
||||||
]));
|
]));
|
||||||
|
inc(rId);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
AppendToStream(FSDrawingsRels[FCurSheetNum],
|
AppendToStream(FSDrawingsRels[FCurSheetNum],
|
||||||
|
Reference in New Issue
Block a user