OpenXml, especifique el número de filas para insertar contenido

La solución es mover todo el contenido por debajo del número especificado de líneas hacia abajo una línea y luego insertar contenido nuevo.

Código de muestra:

utilizando el sistema;

usando System.Collections.Generic;

utilizando System.Linq;

utilizando System.Web;

utilizando System.Web.UI;

utilizando System.Web.UI.WebControls;

utilizando DocumentFormat.OpenXml;

utilizando DocumentFormat.OpenXml.Spreadsheet;

utilizando DocumentFormat.OpenXml.Packaging;

utilizando System.IO;

usando System.Text.RegularExpressions;

espacio de nombres  OpenXmlTest

{

    Clase parcial pública OpenXml : System.Web.UI. Página

    {

        Page_Load vacío protegido ( remitente del objeto , EventArgs e)

        {

            intentar

            {

                string sfile = Server.MapPath( "~/Office/template.xlsx" );

                archivo de cadena = Server.MapPath( "~/Office" ) + "/" + DateTime .Now.ToString( "yyyyMMddHHmmssffff" ) + ".xlsx" ;

                Archivo .Copiar(archivo, archivo);

                utilizando ( Documento de hoja de cálculo xl = Documento de hoja de cálculo . Abrir (archivo, verdadero ))

                {

                    WorkbookPart wp = xl.WorkbookPart;

                    Libro de trabajo wb = wp.Libro de trabajo;

                   Hoja s = wb.Descendientes<Hoja> ( ).Dónde(w => w.Nombre == "Hoja1" ).FirstOrDefault();

                    WorksheetPart sp = wp.GetPartById(s.Id) as WorksheetPart ;

                    si (esp! = nulo )

                    {

                        SheetData sda = sp.Worksheet.Descendants< SheetData >().FirstOrDefault();

                        //SharedStringTable stringTable = xl.WorkbookPart.SharedStringTablePart.SharedStringTable;

                        //Fila fila = sp.Worksheet.Descendants<Row>().ToList()[1];

                        int insertIndex = 3; // insertar en la tercera línea

                        // Mueve todo el contenido de las siguientes lineas hacia abajo

                        foreach ( Fila fila en sp.Worksheet.Descendants< Fila >())

                        {

                            índice int = int .Parse(row.RowIndex.ToString());

                            if (índice >= insertIndex)

                            {

                                // comienza a moverte desde esta línea

                                fila.RowIndex = nuevo UInt32Value (( uint )índice + 1);

                                foreach ( Celda celda en fila. Descendientes < Celda >())

                                {

                                    Regex r = nueva expresión regular ( @"[0-9]+" );

                                    cadena num = r.Match(cell.CellReference.ToString()).Value;

                                    r = nueva Regex ( @"[a-zA-Z]+" );

                                    string chr = r.Match(cell.CellReference.ToString()).Value;

                                    cadena newRef = cadena .Format( "{0}{1}" , chr, ( int .Parse(num) + 1));

                                    celda.CellReference = newRef;

                                }

                            }

                        }

                        // Insertar uno nuevo después de mover

                        Fila nrow = nueva Fila () { RowIndex = ( UInt32Value )3U };

                        Celda ncel = nueva Celda ();

                        ncell.CellReference = string .Format( "A{0}" , insertIndex);

                        ncell.DataType = CellValues ​​.String;

                        ncell.CellValue = new CellValue ( " recién insertado " );

                        nrow.Append(ncell);

                        sda.InsertAt< Fila >(nrow, insertIndex - 1);

                        //cell.DataType = CellValues.String;

                        //celda.ValorCelda = new ValorCelda("1");

                        //Fila nfila = nueva Fila();

                        //Celda ncel = nueva Celda();

                        //ncell.StyleIndex = fila.Descendientes<Cell>().ToList()[0].StyleIndex;

                        //ncell.CellValue = new CellValue(DateTime.Now.ToOADate().ToString());

                        //nrow.Append(ncell);

                        //sda.Append(nfila);

                        wb.Guardar();

                    }

                    wb.Clone();

                }

            }

            captura ( excepción ex)

            {

                tirar ex;

            }

        }

    }

}

Supongo que te gusta

Origin blog.csdn.net/y523648/article/details/131556124
Recomendado
Clasificación