为有中文需求的客户提供多渠道中文技术支持.

Tue Oct 17, 2023 9:01 am

Spire Doc for .Net v11.6.0
您好,我的需求表格如Template1所示,因为要动态添加列,所以用了SpilitCell,最后想合并第一行内容相同的列,出现了Template3这样的情况。用ApplyHorizontalMerge合并也是这样。我很确定是SplitCell的问题,因为正常Merge是可行的。请问有什么解决方法或别的动态添加列的思路吗?
Code: Select all
class Template
{
    public string Group { get; set; }
    public string Name { get; set; }
}
List<Template> list = new List<Template>
{
    new Template { Group = "基础类型", Name = "基础A" },
    new Template { Group = "基础类型", Name = "基础B" },
    new Template { Group = "特殊类型", Name = "特殊A" },
    new Template { Group = "特殊类型", Name = "特殊B" },
    new Template { Group = "特殊类型", Name = "特殊C" }
};
for (row = 0; row < 5; row++)
{
    col = row < 2 ? 1 : 2;
    table[row, col].SplitCell(list.Count, 1);
    if (row < 2)
    {
        list.ForEach((item, i) =>
        {
            table[row, 1 + i].FirstParagraph.Text = row == 0 ? item.Group : item.Name;
            if(row == 0)
            {
                table[row, 1 + i].CellFormat.HorizontalMerge = table[row, 1 + i].FirstParagraph.Text == table[row, i].FirstParagraph.Text ? CellMerge.Continue : CellMerge.Start;
            }
        });
    }
}

Template1.jpg

Template2.jpg

Template3.jpg

memorable
 
Posts: 3
Joined: Tue Oct 17, 2023 7:19 am

Wed Oct 18, 2023 3:36 am

您好,

感谢您的反馈。
我使用以下代码尝试实现您的需求,发现单元格都能被正常合并,应该不是我们产品的问题,您可以检查一下您的代码逻辑。我附上了我的测试代码和测试文档供您参考。
Code: Select all
Document doc = new Document();
doc.LoadFromFile(@"test.docx");

Table table = doc.Sections[0].Tables[0] as Table;
List<Template> list = new List<Template>
{
    new Template { Group = "基础类型", Name = "基础A" },
    new Template { Group = "基础类型", Name = "基础B" },
    new Template { Group = "特殊类型", Name = "特殊A" },
    new Template { Group = "特殊类型", Name = "特殊B" },
    new Template { Group = "特殊类型", Name = "特殊C" }
};


int column;
for (int row = 0; row < 6; row++)
{
    column = row < 2 ? 1 : 2;
    table[row, column].SplitCell(list.Count, 1);

    if (row < 2)
    {
        // 记录遍历到第几项
        int t = 0;

        foreach (Template item in list)
        {
            table[row, 1 + t].FirstParagraph.Text = row == 0 ? item.Group : item.Name;
            if(row == 0)
            {
                table[row, 1 + t].CellFormat.HorizontalMerge =
                    table[row, 1 + t].FirstParagraph.Text == table[row, t].FirstParagraph.Text ? CellMerge.Continue : CellMerge.Start;
            }
            t++;
        }
    }
}

doc.SaveToFile(@"result1.docx");


Best regards,
Triste
E-iceblue support team
User avatar

Triste.Dai
 
Posts: 1000
Joined: Tue Nov 15, 2022 3:59 am

Wed Oct 18, 2023 7:01 am

感谢您的回复,我打开您提供的文档也是这样,才意识到可能是WPS的问题,不好意思麻烦您了。最后在Office打开看了一下是正常的。

memorable
 
Posts: 3
Joined: Tue Oct 17, 2023 7:19 am

Wed Oct 18, 2023 7:41 am

您好,

感谢您的反馈。
很高兴知道您的问题已解决,如果您还有其他问题,欢迎您随时咨询。

Best regards,
Triste
E-iceblue support team
User avatar

Triste.Dai
 
Posts: 1000
Joined: Tue Nov 15, 2022 3:59 am

Return to 中文技术支持