Skip to content

Commit b65efdb

Browse files
committed
支援數組 hyperlink.
1 parent f9e249b commit b65efdb

2 files changed

Lines changed: 57 additions & 5 deletions

File tree

src/MiniWord/MiniWord.Implment.cs

Lines changed: 25 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -204,12 +204,10 @@ private static void ReplaceText(OpenXmlElement xmlElement, WordprocessingDocumen
204204
}
205205
t.Remove();
206206
}
207-
else if (tag.Value is MiniWordHyperLink)
207+
else if (tag.Value is MiniWordHyperLink ||
208+
tag.Value is IEnumerable<MiniWordHyperLink>)
208209
{
209-
var mainPart = docx.MainDocumentPart;
210-
var linkInfo = (MiniWordHyperLink)tag.Value;
211-
var hyperlink = GetHyperLink(mainPart, linkInfo);
212-
run.Append(hyperlink);
210+
AddHyperLink(docx, run, tag.Value);
213211
t.Remove();
214212
}
215213
else
@@ -255,6 +253,28 @@ private static void ReplaceText(OpenXmlElement xmlElement, WordprocessingDocumen
255253
}
256254
}
257255

256+
private static void AddHyperLink(WordprocessingDocument docx, Run run, object value)
257+
{
258+
List<MiniWordHyperLink> links = new List<MiniWordHyperLink>();
259+
260+
if (value is MiniWordHyperLink)
261+
{
262+
links.Add((MiniWordHyperLink)value);
263+
}
264+
else
265+
{
266+
links.AddRange((IEnumerable<MiniWordHyperLink>)value);
267+
}
268+
269+
foreach (var linkInfo in links)
270+
{
271+
var mainPart = docx.MainDocumentPart;
272+
var hyperlink = GetHyperLink(mainPart, linkInfo);
273+
run.Append(hyperlink);
274+
run.Append(new Break());
275+
}
276+
}
277+
258278
private static Hyperlink GetHyperLink(MainDocumentPart mainPart, MiniWordHyperLink linkInfo)
259279
{
260280
var hr = mainPart.AddHyperlinkRelationship(new Uri(linkInfo.Url), true);

tests/MiniWordTests/IssueTests.cs

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -530,6 +530,38 @@ public void TestIssue5()
530530
Assert.Contains("<w:hyperlink w:tgtFrame=\"_blank\"", xml);
531531
}
532532

533+
[Fact]
534+
public void TestIssue_MiniWordHyperLinkList()
535+
{
536+
var path = PathHelper.GetTempFilePath();
537+
var templatePath = PathHelper.GetFile("TestBasicFill.docx");
538+
var value = new Dictionary<string, object>()
539+
{
540+
["Name"] = new List<MiniWordHyperLink>(){
541+
new MiniWordHyperLink(){
542+
Url = "https://google.com",
543+
Text = "測試連結22!!"
544+
},
545+
new MiniWordHyperLink(){
546+
Url = "https://google.com",
547+
Text = "測試連結11!!"
548+
}
549+
},
550+
["Company_Name"] = "MiniSofteware",
551+
["CreateDate"] = new DateTime(2021, 01, 01),
552+
["VIP"] = true,
553+
["Points"] = 123,
554+
["APP"] = "Demo APP",
555+
};
556+
MiniWord.SaveAsByTemplate(path, templatePath, value);
557+
//Console.WriteLine(path);
558+
var xml = Helpers.GetZipFileContent(path, "word/document.xml");
559+
Assert.DoesNotContain("Jack Demo APP Account Data", xml);
560+
Assert.Contains("MiniSofteware Demo APP Account Data", xml);
561+
Assert.Contains("MiniSofteware Demo APP Account Data", xml);
562+
Assert.Contains("<w:hyperlink w:tgtFrame=\"_blank\"", xml);
563+
}
564+
533565
/// <summary>
534566
/// [Fuzzy Regex replace similar key · Issue #5 · mini-software/MiniWord](https://github.com/mini-software/MiniWord/issues/5)
535567
/// </summary>

0 commit comments

Comments
 (0)