mirror of
https://github.com/optilude/xlsx-template.git
synced 2026-07-02 00:17:39 +08:00
Move hyperlinks references on added rows and columns (#184)
* Push down and right hyperlinks references * Test push down and right hyperlinks
This commit is contained in:
@@ -1312,6 +1312,16 @@ class Workbook {
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
// Update hyperlinks refs
|
||||
sheet.findall("hyperlinks/hyperlink").forEach(function (hyperlink) {
|
||||
var ref = self.splitRef(hyperlink.attrib.ref);
|
||||
var colNumber = self.charToNum(ref.col);
|
||||
if (colNumber > currentCol) {
|
||||
ref.col = self.numToChar(colNumber + numCols);
|
||||
hyperlink.attrib.ref = self.joinRef(ref);
|
||||
}
|
||||
});
|
||||
}
|
||||
// Look for any merged cell, named table or named range definitions below
|
||||
// `currentRow` and push down by `numRows` (used when rows are inserted).
|
||||
@@ -1414,6 +1424,15 @@ class Workbook {
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
// Update hyperlinks refs
|
||||
sheet.findall("hyperlinks/hyperlink").forEach(function (hyperlink) {
|
||||
var ref = self.splitRef(hyperlink.attrib.ref);
|
||||
if (ref.row > currentRow) {
|
||||
ref.row += numRows;
|
||||
hyperlink.attrib.ref = self.joinRef(ref);
|
||||
}
|
||||
});
|
||||
}
|
||||
getWidthCell(numCol, sheet) {
|
||||
var defaultWidth = sheet.root.find("sheetFormatPr").attrib["defaultColWidth"];
|
||||
|
||||
@@ -684,6 +684,66 @@ describe("CRUD operations", function() {
|
||||
});
|
||||
});
|
||||
|
||||
it("moved hyperlinks in sheet", function(done) {
|
||||
fs.readFile(path.join(__dirname, "templates", "test-moved-hyperlinks.xlsx"), function(err, data) {
|
||||
expect(err).toBeNull();
|
||||
|
||||
var t = new XlsxTemplate(data);
|
||||
|
||||
t.substitute(1, {
|
||||
email: "john@bob.com",
|
||||
subject: "hello",
|
||||
url: "http://www.google.com",
|
||||
domain: "google",
|
||||
rows: [{
|
||||
name: 'One',
|
||||
amount: 1,
|
||||
}, {
|
||||
name: 'Two',
|
||||
amount: 2,
|
||||
}, {
|
||||
name: 'Three',
|
||||
amount: 3,
|
||||
}],
|
||||
list: ['A', 'B', 'C', 'D']
|
||||
});
|
||||
|
||||
var newData = t.generate();
|
||||
|
||||
var sharedStrings = etree.parse(t.archive.file("xl/sharedStrings.xml").asText()).getroot(),
|
||||
sheet1 = etree.parse(t.archive.file("xl/worksheets/sheet1.xml").asText()).getroot(),
|
||||
rels = etree.parse(t.archive.file("xl/worksheets/_rels/sheet1.xml.rels").asText()).getroot()
|
||||
;
|
||||
|
||||
// Every hyperlink has being substituted
|
||||
expect(rels.find("./Relationship[@Id='rId1']").attrib.Target).toEqual("mailto:john@bob.com?subject=Hello%20hello");
|
||||
expect(rels.find("./Relationship[@Id='rId2']").attrib.Target).toEqual("http://www.google.com");
|
||||
expect(rels.find("./Relationship[@Id='rId3']").attrib.Target).toEqual("mailto:john@bob.com?subject=Hello%20hello");
|
||||
expect(rels.find("./Relationship[@Id='rId4']").attrib.Target).toEqual("http://www.google.com");
|
||||
expect(rels.find("./Relationship[@Id='rId5']").attrib.Target).toEqual("mailto:john@bob.com?subject=Hello%20hello");
|
||||
expect(rels.find("./Relationship[@Id='rId6']").attrib.Target).toEqual("http://www.google.com");
|
||||
|
||||
// Hyperlinks have moved
|
||||
expect(sheet1.find("./hyperlinks/hyperlink[@ref='B7']")).not.toBeNull(); // before table and list - unchanged
|
||||
expect(sheet1.find("./hyperlinks/hyperlink[@ref='C7']")).not.toBeNull(); // before table and list - unchanged
|
||||
|
||||
expect(sheet1.find("./hyperlinks/hyperlink[@ref='B14']")).toBeNull(); // pushed down
|
||||
expect(sheet1.find("./hyperlinks/hyperlink[@ref='B16']")).not.toBeNull(); // pushed down
|
||||
expect(sheet1.find("./hyperlinks/hyperlink[@ref='C14']")).toBeNull(); // pushed down
|
||||
expect(sheet1.find("./hyperlinks/hyperlink[@ref='C16']")).not.toBeNull(); // pushed down
|
||||
|
||||
expect(sheet1.find("./hyperlinks/hyperlink[@ref='F14']")).toBeNull(); // pushed down and accross
|
||||
expect(sheet1.find("./hyperlinks/hyperlink[@ref='I16']")).not.toBeNull(); // pushed down and accross
|
||||
expect(sheet1.find("./hyperlinks/hyperlink[@ref='G14']")).toBeNull(); // pushed down and accross
|
||||
expect(sheet1.find("./hyperlinks/hyperlink[@ref='J16']")).not.toBeNull(); // pushed down and accross
|
||||
|
||||
// XXX: For debugging only
|
||||
fs.writeFileSync("test/output/test-moved-hyperlinks.xlsx", newData, "binary");
|
||||
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
it("moves named tables, named cells and merged cells", function(done) {
|
||||
|
||||
fs.readFile(path.join(__dirname, "templates", "test-named-tables.xlsx"), function(err, data) {
|
||||
|
||||
Binary file not shown.
Reference in New Issue
Block a user