You've already forked lazarus-ccr
fpspreadsheet: Fix xlsx reader applying hyperlinks to all sheets (https://forum.lazarus.freepascal.org/index.php/topic,46248.msg329067)-
git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@7089 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
@ -81,7 +81,7 @@ type
|
|||||||
function ReadFont(ANode: TDOMNode): Integer;
|
function ReadFont(ANode: TDOMNode): Integer;
|
||||||
procedure ReadFonts(ANode: TDOMNode);
|
procedure ReadFonts(ANode: TDOMNode);
|
||||||
procedure ReadHeaderFooter(ANode: TDOMNode; AWorksheet: TsBasicWorksheet);
|
procedure ReadHeaderFooter(ANode: TDOMNode; AWorksheet: TsBasicWorksheet);
|
||||||
procedure ReadHyperlinks(ANode: TDOMNode);
|
procedure ReadHyperlinks(ANode: TDOMNode; AWorksheet: TsBasicWorksheet);
|
||||||
procedure ReadMergedCells(ANode: TDOMNode; AWorksheet: TsBasicWorksheet);
|
procedure ReadMergedCells(ANode: TDOMNode; AWorksheet: TsBasicWorksheet);
|
||||||
procedure ReadNumFormats(ANode: TDOMNode);
|
procedure ReadNumFormats(ANode: TDOMNode);
|
||||||
procedure ReadPageMargins(ANode: TDOMNode; AWorksheet: TsBasicWorksheet);
|
procedure ReadPageMargins(ANode: TDOMNode; AWorksheet: TsBasicWorksheet);
|
||||||
@ -318,6 +318,7 @@ type
|
|||||||
TextMark: String;
|
TextMark: String;
|
||||||
Display: String;
|
Display: String;
|
||||||
Tooltip: String;
|
Tooltip: String;
|
||||||
|
Worksheet: TsBasicWorksheet;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
TSharedFormulaData = class
|
TSharedFormulaData = class
|
||||||
@ -473,6 +474,9 @@ begin
|
|||||||
for i:=0 to FHyperlinkList.Count-1 do
|
for i:=0 to FHyperlinkList.Count-1 do
|
||||||
begin
|
begin
|
||||||
hyperlinkData := THyperlinkListData(FHyperlinkList.Items[i]);
|
hyperlinkData := THyperlinkListData(FHyperlinkList.Items[i]);
|
||||||
|
if hyperlinkData.Worksheet <> sheet then
|
||||||
|
Continue;
|
||||||
|
|
||||||
if pos(':', hyperlinkdata.CellRef) = 0 then
|
if pos(':', hyperlinkdata.CellRef) = 0 then
|
||||||
begin
|
begin
|
||||||
ParseCellString(hyperlinkData.CellRef, r1, c1);
|
ParseCellString(hyperlinkData.CellRef, r1, c1);
|
||||||
@ -1707,7 +1711,8 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TsSpreadOOXMLReader.ReadHyperlinks(ANode: TDOMNode);
|
procedure TsSpreadOOXMLReader.ReadHyperlinks(ANode: TDOMNode;
|
||||||
|
AWorksheet: TsBasicWorksheet);
|
||||||
var
|
var
|
||||||
node: TDOMNode;
|
node: TDOMNode;
|
||||||
nodeName: String;
|
nodeName: String;
|
||||||
@ -1743,6 +1748,7 @@ begin
|
|||||||
hyperlinkData.TextMark := GetAttrValue(node, 'location');
|
hyperlinkData.TextMark := GetAttrValue(node, 'location');
|
||||||
hyperlinkData.Display := GetAttrValue(node, 'display');
|
hyperlinkData.Display := GetAttrValue(node, 'display');
|
||||||
hyperlinkData.Tooltip := GetAttrValue(node, 'tooltip');
|
hyperlinkData.Tooltip := GetAttrValue(node, 'tooltip');
|
||||||
|
hyperlinkData.Worksheet := AWorksheet;
|
||||||
end;
|
end;
|
||||||
FHyperlinkList.Add(hyperlinkData);
|
FHyperlinkList.Add(hyperlinkData);
|
||||||
node := node.NextSibling;
|
node := node.NextSibling;
|
||||||
@ -2714,7 +2720,7 @@ begin
|
|||||||
ReadWorksheet(Doc_FindNode('sheetData'), FWorksheet);
|
ReadWorksheet(Doc_FindNode('sheetData'), FWorksheet);
|
||||||
ReadSheetProtection(Doc_FindNode('sheetProtection'), FWorksheet);
|
ReadSheetProtection(Doc_FindNode('sheetProtection'), FWorksheet);
|
||||||
ReadMergedCells(Doc_FindNode('mergeCells'), FWorksheet);
|
ReadMergedCells(Doc_FindNode('mergeCells'), FWorksheet);
|
||||||
ReadHyperlinks(Doc_FindNode('hyperlinks'));
|
ReadHyperlinks(Doc_FindNode('hyperlinks'), FWorksheet);
|
||||||
ReadPrintOptions(Doc_FindNode('printOptions'), FWorksheet);
|
ReadPrintOptions(Doc_FindNode('printOptions'), FWorksheet);
|
||||||
ReadPageMargins(Doc_FindNode('pageMargins'), FWorksheet);
|
ReadPageMargins(Doc_FindNode('pageMargins'), FWorksheet);
|
||||||
ReadPageSetup(Doc_FindNode('pageSetup'), FWorksheet);
|
ReadPageSetup(Doc_FindNode('pageSetup'), FWorksheet);
|
||||||
@ -2739,7 +2745,7 @@ begin
|
|||||||
RelsNode := Doc_FindNode('Relationship');
|
RelsNode := Doc_FindNode('Relationship');
|
||||||
fn_comments := FindCommentsFileName(RelsNode);
|
fn_comments := FindCommentsFileName(RelsNode);
|
||||||
// Get hyperlink data
|
// Get hyperlink data
|
||||||
ReadHyperlinks(RelsNode);
|
ReadHyperlinks(RelsNode, FWorksheet);
|
||||||
FreeAndNil(Doc);
|
FreeAndNil(Doc);
|
||||||
end else
|
end else
|
||||||
if (FSheetList.Count = 1) then
|
if (FSheetList.Count = 1) then
|
||||||
|
Reference in New Issue
Block a user