• <menu id="w2i4a"></menu>
  • logo Aspose.Words開發(fā)者指南

    文檔首頁>>Aspose.Words開發(fā)者指南>>Aspose.Words for .NET使用表格教程之處理合并的單元格

    Aspose.Words for .NET使用表格教程之處理合并的單元格


    推薦閱讀【Aspose.Words for .NET使用表格教程之應(yīng)用格式——將格式應(yīng)用于表,行和單元格】


    Aspose.Words For .Net是一種高級Word文檔處理API,用于執(zhí)行各種文檔管理和操作任務(wù)。API支持生成,修改,轉(zhuǎn)換,呈現(xiàn)和打印文檔,而無需在跨平臺應(yīng)用程序中直接使用Microsoft Word。此外,API支持所有流行的Word處理文件格式,并允許將Word文檔導(dǎo)出或轉(zhuǎn)換為固定布局文件格式和最常用的圖像/多媒體格式。

    接下來我們將進(jìn)入“使用格式”的介紹,其中包括應(yīng)用格式、介紹和創(chuàng)建表、添加和拆分表以及使用列和行。本文將為大家講解如何在表格中運用自動調(diào)整設(shè)置。

    >>Aspose.Words for .NET更新至最新版v19.10,歡迎下載體驗

    致改變世界的程序員——現(xiàn)在購買Aspose系列產(chǎn)品最高可享10000元高額減免!更多活動詳情可咨詢在線客服哦~


    在一個表中,幾個單元格可以合并到一個單元格中。當(dāng)某些行需要標(biāo)題或跨表寬度的大塊文本時,此功能很有用。這只能通過將表中的某些單元格合并為一個單元格來實現(xiàn)。當(dāng)使用所有輸入格式(包括導(dǎo)入HTML內(nèi)容)時,Aspose.Words支持合并的單元格。

    Aspose.Words中的合并單元格

    在Aspose.Words中,合并的單元格由CellFormat.HorizontalMerge和CellFormat.VerticalMerge表示。所述CellFormat.HorizontalMerge屬性描述如果所述細(xì)胞是細(xì)胞的水平合并的一部分。同樣,CellFormat.VerticalMerge屬性描述單元格是否是單元格垂直合并的一部分。這些屬性的值定義了單元格的合并行為。

    • 合并單元格序列中的第一個單元格將具有CellMerge.First。
    • 任何隨后合并的單元格將具有CellMerge.Previous。
    • 未合并的單元格將具有CellMerge.None。

    檢查單元格是否合并

    要檢查某個單元格是否為合并單元格序列的一部分,我們只需檢查CellFormat.HorizontalMerge和CellFormat.VerticalMerge屬性。 下面的示例顯示單元格的水平和垂直合并類型。您可以從此處下載該示例的模板文件。

    Document doc = new Document(dataDir + "Table.MergedCells.doc");
    
    // Retrieve the first table in the document.
    Table table = (Table)doc.GetChild(NodeType.Table, 0, true);
    
    foreach (Row row in table.Rows)
    {
        foreach (Cell cell in row.Cells)
        {
            Console.WriteLine(PrintCellMergeType(cell));
        }
    }

    合并表格中的單元格

    使用相同的技術(shù)來設(shè)置表中單元格的合并行為。使用DocumentBuilder構(gòu)建具有合并單元格的表時,需要為每個單元格設(shè)置適當(dāng)?shù)暮喜㈩愋?。另外,您必須記住清除合并設(shè)置,否則表中的所有單元格將被合并??梢酝ㄟ^將適當(dāng)?shù)暮喜傩缘闹翟O(shè)置為CellMerge.None來完成。 下面的示例創(chuàng)建一個具有兩行的表,其中第一行的單元格水平合并。

    Document doc = new Document();
    DocumentBuilder builder = new DocumentBuilder(doc);
    
    builder.InsertCell();
    builder.CellFormat.HorizontalMerge = CellMerge.First;
    builder.Write("Text in merged cells.");
    
    builder.InsertCell();
    // This cell is merged to the previous and should be empty.
    builder.CellFormat.HorizontalMerge = CellMerge.Previous;
    builder.EndRow();
    
    builder.InsertCell();
    builder.CellFormat.HorizontalMerge = CellMerge.None;
    builder.Write("Text in one cell.");
    
    builder.InsertCell();
    builder.Write("Text in another cell.");
    builder.EndRow();
    builder.EndTable();
    dataDir = dataDir + "Table.HorizontalMerge_out.doc";
    
    // Save the document to disk.
    doc.Save(dataDir);

    下面的示例創(chuàng)建一個具有兩列的表格,第一列中的單元格垂直合并。

    Document doc = new Document();
    DocumentBuilder builder = new DocumentBuilder(doc);
    
    builder.InsertCell();
    builder.CellFormat.VerticalMerge = CellMerge.First;
    builder.Write("Text in merged cells.");
    
    builder.InsertCell();
    builder.CellFormat.VerticalMerge = CellMerge.None;
    builder.Write("Text in one cell");
    builder.EndRow();
    
    builder.InsertCell();
    // This cell is vertically merged to the cell above and should be empty.
    builder.CellFormat.VerticalMerge = CellMerge.Previous;
    
    builder.InsertCell();
    builder.CellFormat.VerticalMerge = CellMerge.None;
    builder.Write("Text in another cell");
    builder.EndRow();
    builder.EndTable();
    dataDir = dataDir + "Table.VerticalMerge_out.doc";
    
    // Save the document to disk.
    doc.Save(dataDir);

    在不使用構(gòu)建器的其他情況下(例如在現(xiàn)有表中),以這種方式合并單元可能不是那么簡單。 取而代之的是,我們可以將將合并屬性應(yīng)用于單元格所涉及的基本操作包裝到一種使任務(wù)輕松得多的方法中。 此方法類似于自動合并方法,該方法被稱為合并表中的一系列單元格。 下面的代碼將合并表中從給定單元格到結(jié)束單元格的單元格范圍。 此范圍可以跨越許多行或列。 一種合并表中所有單元格在指定單元格范圍內(nèi)的方法。

    internal static void MergeCells(Cell startCell, Cell endCell)
    {
        Table parentTable = startCell.ParentRow.ParentTable;
    
        // Find the row and cell indices for the start and end cell.
        Point startCellPos = new Point(startCell.ParentRow.IndexOf(startCell), parentTable.IndexOf(startCell.ParentRow));
        Point endCellPos = new Point(endCell.ParentRow.IndexOf(endCell), parentTable.IndexOf(endCell.ParentRow));
        // Create the range of cells to be merged based off these indices. Inverse each index if the end cell if before the start cell. 
        Rectangle mergeRange = new Rectangle( System.Math.Min(startCellPos.X, endCellPos.X), System.Math.Min(startCellPos.Y, endCellPos.Y),
            System.Math.Abs(endCellPos.X - startCellPos.X) + 1, System.Math.Abs(endCellPos.Y - startCellPos.Y) + 1);
    
        foreach (Row row in parentTable.Rows)
        {
            foreach (Cell cell in row.Cells)
            {
                Point currentPos = new Point(row.IndexOf(cell), parentTable.IndexOf(row));
    
                // Check if the current cell is inside our merge range then merge it.
                if (mergeRange.Contains(currentPos))
                {
                    if (currentPos.X == mergeRange.X)
                        cell.CellFormat.HorizontalMerge = CellMerge.First;
                    else
                        cell.CellFormat.HorizontalMerge = CellMerge.Previous;
    
                    if (currentPos.Y == mergeRange.Y)
                        cell.CellFormat.VerticalMerge = CellMerge.First;
                    else
                        cell.CellFormat.VerticalMerge = CellMerge.Previous;
                }
            }
        }
    }

    下面的示例合并兩個指定單元格之間的單元格范圍。

    // Open the document
    Document doc = new Document(dataDir + "Table.Document.doc");
    
    // Retrieve the first table in the body of the first section.
    Table table = doc.FirstSection.Body.Tables[0];
               
    // We want to merge the range of cells found inbetween these two cells.
    Cell cellStartRange = table.Rows[2].Cells[2];
    Cell cellEndRange = table.Rows[3].Cells[3];
    
    // Merge all the cells between the two specified cells into one.
    MergeCells(cellStartRange, cellEndRange);            
    dataDir = dataDir + "Table.MergeCellRange_out.doc";
    // Save the document.
    doc.Save(dataDir);

    ASPOSE技術(shù)交流QQ群(642018183)已開通,各類資源及時分享,歡迎交流討論!

    掃描關(guān)注“慧聚IT”微信公眾號,及時獲取更多產(chǎn)品最新動態(tài)及最新資訊

    慧聚IT公眾號二維碼


    掃碼咨詢


    添加微信 立即咨詢

    電話咨詢

    客服熱線
    023-68661681

    TOP
    三级成人熟女影院,欧美午夜成人精品视频,亚洲国产成人乱色在线观看,色中色成人论坛 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();