簡體   English   中英

使用 EPPlus 合並單元格?

[英]Merge cells using EPPlus?

我正在使用 EPPlus 庫讀取/寫入 Excel 個文件: http://epplus.codeplex.com/

我試圖在編寫文檔時簡單地合並一些單元格:

using (ExcelPackage pck = new ExcelPackage())
{
    //Create the worksheet
    ExcelWorksheet ws = pck.Workbook.Worksheets.Add("Demo");

    //Format the header for column 1-3
    using (ExcelRange rng = ws.Cells["A1:C1"])
    {
        bool merge = rng.Merge;
    }
}

有一個名為 Merge 的屬性,它只返回 true 或 false。 我想也許這會合並單元格,但事實並非如此。

有人知道怎么做嗎?

你必須像這樣使用它:

ws.Cells["A1:C1"].Merge = true;

代替:

using (ExcelRange rng = ws.Cells["A1:C1"])
{
    bool merge = rng.Merge;
}

如果要動態合並單元格,還可以使用:

worksheet.Cells[FromRow, FromColumn, ToRow, ToColumn].Merge = true;

所有這些變量都是整數。

您可以創建一個擴展方法:

public static void Merge(this ExcelRangeBase range)
{
    ExcelCellAddress start = range.Start;
    ExcelCellAddress end = range.End;
    range.Worksheet.Cells[start.Row, start.Column, end.Row, end.Column].Merge = true;
}

您可以像通過互操作一樣使用它:

range.Merge();

在此處輸入圖像描述 int initio = CELDA_CUERPO; 布爾值=真;

    int COLUMNA_A = 0;
    int finx_a = 0;
    int finy_a = 0;

    int COLUMNA_B = 1;
    int finx_b = 0;
    int finy_b = 0;

//品塔爾卡貝塞拉:

    for (int i = 0; i < ListaCabecera.Length; i++)
    {
        celda = $"{letras[i]}{CELDA_CABECERA}";

        if (i == 0)
        {
            inicioRango = celda;
        }

        Sheet.Cells[celda].Value = ListaCabecera[i];
        //System.Drawing.Color colFromHex = System.Drawing.ColorTranslator.FromHtml("#B7DEE8");
        Sheet.Cells[celda].Style.Font.Color.SetColor(Color.FromArgb(0, 124, 183));
        Sheet.Cells[celda].Style.Fill.PatternType = ExcelFillStyle.Solid;
        Sheet.Cells[celda].Style.Fill.BackgroundColor.SetColor(Color.FromArgb(232, 235, 249));
        Sheet.Cells[celda].Style.Font.Bold = true;
        Sheet.Cells[celda].Style.HorizontalAlignment = ExcelHorizontalAlignment.Center;
    }

    //Pintar detalle:
    for (int i = 0; i < Datos.GetLength(0); i++)
    {
        for (int j = 0; j < Datos.GetLength(1); j++)
        {
            celda = $"{letras[j]}{CELDA_CUERPO + i}";
            finalizaRango = celda;

            if (j < 3) if (Datos[i, j].valor != null && Datos[i, j + 1].valor == null)
                {
                    Sheet.Cells[celda].Style.Font.Color.SetColor(Color.FromArgb(156, 0, 6));
                    Sheet.Cells[celda].Style.Fill.PatternType = ExcelFillStyle.Solid;
                    Sheet.Cells[celda].Style.Fill.BackgroundColor.SetColor(Color.FromArgb(255, 199,206));
                }
            Sheet.Cells[celda].Value = Datos[i, j].valor;
        }

        //::::::::::::::::::: MERGE A ::::::::::::::::::::
        if (i < Datos.GetLength(0) - 1)
        {
            // :::::::::::::::::::::: x :::::::::::::::::::::::::::::::::
            if (values)
            {
                if (Datos[i, COLUMNA_A].valor == Datos[i, COLUMNA_A].valor)
                {
                    values = false;
                    finx_a = inicio + i;
                    finx_b = inicio + i;
                    //list_x.Add(finx_b);
                }
            }
            else
            {
                if (Datos[i - 1, COLUMNA_A].valor != Datos[i, COLUMNA_A].valor)
                {
                    finx_a = inicio + i;
                }

                if (Datos[i - 1, COLUMNA_B].valor != Datos[i, COLUMNA_B].valor)
                {
                    finx_b = inicio + i;
                    //list_x.Add(finx_b);
                }
             }

            // :::::::::::::::::::::: y (A) :::::::::::::::::::::::::::::::::
            if (Datos[i, COLUMNA_A].valor != Datos[i + 1, COLUMNA_A].valor)
            {
                finy_a = inicio + i;
                //list_y.Add(finy);
                Sheet.Cells[$"A{finx_a}:A{finy_a}"].Value = Datos[i, COLUMNA_A].valor;
                Sheet.Cells[$"A{finx_a}:A{finy_a}"].Merge = true;
                Sheet.Cells[$"A{finx_a}:A{finy_a}"].Style.VerticalAlignment = ExcelVerticalAlignment.Center;
            }

            // :::::::::::::::::::::: y (B) :::::::::::::::::::::::::::::::::
            if (Datos[i, COLUMNA_B].valor != Datos[i + 1, COLUMNA_B].valor)
            {
                finy_b = inicio + i;
                //list_y.Add(finy_b);
                Sheet.Cells[$"B{finx_b}:B{finy_b}"].Value = Datos[i, COLUMNA_B].valor;
                Sheet.Cells[$"B{finx_b}:B{finy_b}"].Merge = true;
                Sheet.Cells[$"B{finx_b}:B{finy_b}"].Style.VerticalAlignment = ExcelVerticalAlignment.Center;
            }
       
         }
        //::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
     }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM