2011-01-27 17 views
13

Ok, entonces estoy tratando de establecer el valor de una celda con la biblioteca de Excel interoperabilidad. Puedo hacerlo con lo siguiente:Establecer el valor de la celda mediante la interoperación de Excel

sheet.Cells[row, col] = value; 

pero es terriblemente lento para la cantidad que estoy configurando. Así que estoy tratando de seguir esta ruta:

Range excelRange = sheet.UsedRange; 
excelRange.Cells.set_Item(row, col, value); 

El código se ejecuta, pero no se ingresan datos en la celda. ¿Alguna sugerencia sobre lo que me estoy perdiendo? ¡Gracias!

+0

¿De cuántas celdas estamos hablando? –

+1

¿Hay algún valor en "valor"? ¿El "valor" es del tipo correcto para que pueda caber en Cell? –

Respuesta

19

Su primer método debería funcionar bien para cualquier cantidad razonable (y mucho irrazonable) de celdas, siempre que haya desactivado la actualización de la pantalla (Application.ScreenUpdating = false). El Knowledgebase Article que describe cómo establecer celdas usando accesos de C# por fila y columna también.

16

¿Ha intentado establecer todos los valores a la vez, en lugar de iterar a través de su matriz y configurar una celda a la vez? De esta forma, solo debe pasar datos sobre el límite COM una vez, en lugar de pasar una vez por celda.

Excel es muy flexible en este sentido. Intente lo siguiente:

int[] intArray = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; 
Range rng = excelApp.get_Range("A1", "J1"); 
rng.Value = intArray; 

Esto debería ser más rápido que iterar sobre cada una de las celdas que desea establecer.

Aparte de eso, desactive la función de actualización de pantalla como lo sugiere Andy y también considere establecer el cálculo en manual hasta que haya terminado su proceso de copia.

+0

Hmm, probé esto y funcionó, pero hay varias celdas que se fusionan en la fila y no se establecen los valores correctamente. Estoy usando una matriz de objetos, ya que los datos son mixtos, algunos decimales, algunas cadenas. – Arthurdent510

+4

También puede usar una matriz multidimensional para llenar un rango. –

-5

Por favor, intente

[excelWorksheet].Cells[1, 1] = "[String you want]"; 
1

solución simple pero aquí tendrá que instalar el paquete Microsoft.Office.Interop.Excel por escribiendo en la consola Nuget

Instalar Paquete Microsoft.Office.Interop.Excel

//test excel file 
    Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application(); 

     Workbook workbook = excel.Workbooks.Open(System.Windows.Forms.Application.StartupPath + "/TrainedFaces/AttendanceLog.xlsx", ReadOnly: false, Editable: true); 
     Worksheet worksheet = workbook.Worksheets.Item[1] as Worksheet; 
     if (worksheet == null) 
      return; 

     var abc = worksheet.Cells[2, 1].Value; 
     Range row1 = worksheet.Rows.Cells[1, 1]; 
     Range row2 = worksheet.Rows.Cells[2, 1]; 

     row1.Value = "Test100"; 
     row2.Value = "Test200"; 


     excel.Application.ActiveWorkbook.Save(); 
     excel.Application.Quit(); 
     excel.Quit(); 
Cuestiones relacionadas