Red de conocimiento informático - Material del sitio web - Cómo importar datos a Excel más rápido

Cómo importar datos a Excel más rápido

Este artículo presentará 3 formas de importar datos a Excel:

1. Método básico: copiar celda por celda

2. Utilice el objeto StreamWriter de secuencia de archivos: Escriba la secuencia en el archivo

3. Método para copiar el objeto: copie los datos en la matriz y luego péguelos directamente en el libro de Excel.

Método básico

Usar el método de copia básico llevará mucho tiempo. Los métodos que utilizan secuencias de archivos o copian objetos serán mucho más rápidos que los métodos básicos.

Debes agregar una referencia al objeto COM de Excel a tu aplicación. Voy a declarar dos objetos, Ex de tipo Excel.Application. Ws es del tipo Excel.Worksheet y luego establezca Ws en la primera hoja de trabajo del libro.

Escribiremos código para recorrer los títulos de cada columna de la tabla para mostrar los títulos.

Usamos columnas (índices) para recuperar el título de la columna, el atributo Caption o ColumnName.

Para todos los datos, usaremos dos bucles, uno para fila y otro para columna

Código

Aplicación Microsoft.Office.Interop.Excel. = nuevo Microsoft.Office.Interop.Excel.Application();

Microsoft.Office.Interop.Excel.Worksheet Ws;

Ex.Workbooks.Add(Microsoft.Office .Interop .Excel.XlWBATemplate.xlWBATWorksheet);

Ws= (Microsoft.Office.Interop.Excel.Worksheet)Ex.Worksheets[1];

int Fila = 0;

int Col = 0;

int i = 0;

int j = 0;

pb.Maximum = Ds.Tables[ 0] .Rows.Count;

Fila = 1;

Col ​​​​= 1;

//'Para encabezado

lblCount. Text = "Generando encabezado.";

this.Refresh();

for (i = 0; i <= Ds.Tables[0].Columns.Count - 1; i++)

{

Ws.Cells[Row, Col] = Ds.Tables[0].Columns[i].Caption;

Col ​​​​+= 1;

}

Fila = 2;

Col ​​​​= 1;

pb1.Maximum = Ds.Tables [0]. Columns.Count;

lblCount.Text = "Preparándose para exportar datos.";

for (i = 0; i <= Ds.Tables[0]. Rows.Count - 1; i++)

{

//

//PARA TODOS LOS DATOS

//

pb1 .Value = 0;

for (j = 0; j <= Ds.Tables[0].Columns.Count - 1; j++)

{

Ws.Cells[Row, Col] = Ds.Tables[0].Rows[i][j].ToString();

Col ​​+= 1;

pb1 .Value += 1;

}

//'Si los datos son más de 65500, establezca ws en la siguiente hoja

if (Fila == 65500)

{

Fila = 1;

Ws = (Microsoft.Office.Interop.Excel.Worksheet)Ex.Worksheets[2];

}

Col ​​​​= 1;

Fila += 1;

lblCount.Text = i + 1 + " : Exportado";

lblCount.Refresh();

pb.Value += 1;

}

pb.Value = 0;

Ex.Visible = true;

MessageBox.Show(Ds.Tables[0].Rows.Count + " : Registros exportados. ");

Ex.Visible = verdadero;

Ej.Salir();

Ejemplo = nulo;

Ws = nulo;

Usar StreamWriter:

Este método es más corto y más rápido para importar datos a cualquier tipo de archivo

En este método, usaré el espacio de nombres System.IO y mediante programación iré al .xls especificado. o .doc y otras extensiones para crear directamente una ruta de archivo.

La codificación comienza con la ruta al archivo donde se crea el archivo de Excel y se almacenan los datos. Ahora, declare un objeto IO.StreamWriter con una ruta especificada. En este método, los valores de fila/columna de cada fila se agregan a la cadena con "|" como delimitador. El archivo creado ahora contiene datos de una sola columna separados por "|" (formato CSV).

Código

string filePath = "c:\\SystemIO_Exported_Data_AsOn_" + DateTime.Now.ToShortDateString() + ".xls";

//Stream Writer objeto para escribir la secuencia en el archivo

StreamWriter escritor = new StreamWriter(File.Create(filePath));

string str = string.Empty;

/ /'For Encabezado

lblCount.Text = "Generando encabezado.";

this.Refresh();

for (int i = 0; i < = Ds.Tables[0].Columns.Count - 1; i++)

{

str += Ds.Tables[0].Columns[i].Caption +Constants. vbTab;

}

//Escribe la secuencia en el archivo agregando una nueva línea a la secuencia

str += Microsoft.VisualBasic.Constants.vbNewLine;

escritor.Write(str);

escritor.Flush();

pb.Maximum = Ds.Tables[0].Rows.Count + 1; p>

foreach (DataRow dRow en Ds.Tables[0].Rows)

{

str = "";

for ( int col = 0; col <= Ds.Tables[0].Columns.Count - 1; col++)

{

cadena STR1 = "";

char c = Strings.Chr(32);

//char[] sep = " ";

string[] str2 = null;

str2 = dRow [col].ToString().Split(' ');

for (int z = 0; z <= str2.Length - 1; z++)

{

//reemplazando todos los espacios y tabulaciones con '|' (signo de tubería)

string y = str2[z].ToString().Replace(Strings.Chr(32), ' ').Replace(Strings .Chr(13), ' ').Replace(Strings.Chr(10), ' ').Replace(Strings.Chr(9), ' ').Replace("|", " ");

STR1 += y + " ";

}

str += STR1 + "| ";

pb.Value += 1;

}

str += Constants.vbNewLine;

escritor.Write(str);

escritor.Flush(); p>

pb.Value = 0;

}

//Cerrar el objeto de escritura de flujo

escritor.Close();

pb.Value = 0;

MessageBox.Show("Datos exportados exitosamente.");

Método de copia del objeto:

Este es otro Un método para importar datos a Excel.

En el código, creamos una matriz bidimensional: object[,] rawData = new object[dt.Rows.Count + 1, dt.Columns.Count] para contener los datos en la tabla de datos.

p>

Una vez que los datos se almacenan en una matriz, los pegará en una hoja de cálculo de Excel mediante el método get_Range().value de la hoja de cálculo de Excel.

Código

if (Ds.Tables.Count > 3)

{

MessageBox.Show("Hay más de 3 tabla de datos. Los datos no se pueden exportar.","tip");

return;

}

intsheetIndex = 0;

Microsoft.Office.Interop.Excel.Application Ex = nuevo Microsoft.Office.Interop.Excel.Application();

Microsoft.Office.Interop.Excel.Worksheet Ws;

Microsoft.Office.Interop.Excel.Workbook Wb = Ex.Workbooks.Add(Microsoft.Office.Interop.Excel.XlWBATemplate.xlWBATWorksheet);

Ws = (Microsoft.Office.Interop.Excel.Worksheet) )Ej.Worksheets[1];

// Copia cada DataTable como una nueva Hoja

foreach (System.Data.DataTable dt en Ds.Tables)

{

//En caso de error, reanudar siguiente

int col = 0;

int row = 0;

// Copiar el DataTable a una matriz de objetos

object[,] rawData = new object[dt.Rows.Count + 1, dt.Columns.Count];

lblCount.Text = "Copiando columnas Name.";

this.Refresh();

// Copia los nombres de las columnas a la primera fila de la matriz de objetos

pb1.Maximum = dt .Columns.Count + 1;

pb1.Value = 0;

para (col = 0; col <= dt.Columns.Count - 1; col++)

{

datosraw[0, col] = d

t.Columns[col].ColumnName.ToUpper();

pb1.Value += 1;

}

lblCount.Text = "Copiando datos" ;

this.Refresh();

pb1.Value = 0;

// Copia los valores a la matriz de objetos

pb.Maximum = dt.Rows.Count + 1;

pb.Value = 0;

for (col = 0; col <= dt.Columns.Count - 1 ; col++ )

{

para (fila = 0; fila <= dt.Rows.Count - 1; fila++)

{

rawData[fila + 1, col] = dt.Rows[fila].ItemArray[col];

pb.Value += 1;

}

pb.Value = 0;

pb1.Value += 1;

}

pb.Value = 0;

pb1. Value = 0;

lblCount.Text = "";

this.Refresh();

// Calcula la letra de la columna final

string finalColLetter = string.Empty;

finalColLetter = ExcelColName(dt.Columns.Count);

//Generar nombre de columna de Excel (ID de columna)

sheetIndex += 1;

Ws = (Microsoft.Office.Interop.Excel.Worksheet)Wb.Worksheets[sheetIndex];

Ws.Name = dt.TableName;

p>

cadena excelRange = cadena.Format("A1:{0}{1}", finalColLett

er, dt.Rows.Count + 1);

Ws.get_Range(excelRange, Type.Missing).Value2 = rawData;

Ws = null;

}

Wb.SaveAs("C:\\ExportedDataUsingObjectPastingMethod.xls", Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Microsoft.Office.Interop.Excel .XlSaveAsAccessMode.xlNoChange, Type.Missing, Type.Missing, Type.Missing,

Type.Missing, Type.Missing);

Wb.Close(true, Type.Missing, Type.Missing);

Wb = null;

// Liberar el objeto Aplicación

Ex.Quit();

Ex = null;

// Recopila los objetos sin referencia

GC.Collect();

Interaction.MsgBox("Exportado exitosamente.", MsgBoxStyle.Information, "Tip");

Utilizo una función para encontrar los nombres de las columnas de la hoja de cálculo de Excel