/ / C # excel interop cortar y pegar excepción - c #, excel, interop

C # excel interop cortar y pegar excepción - c #, excel, interop

Estoy trabajando en un proyecto y me he encontrado con una excepción que no sé cómo solucionar. He buscado por todas partes y no puedo encontrar una solución que ayude.

Estoy tratando de cortar un rango en una hoja de cálculo queha encontrado un valor específico en una celda en la Columna A y pega la fila completa de ese valor específico en una nueva hoja de cálculo comenzando desde A2 y hasta que el valor ya no se encuentre en la hoja de cálculo original.

Mi código actualmente pega una fila en el nuevola hoja de cálculo luego me da esta excepción "La información no se puede pegar porque el área de corte y el área de pegado no tienen el mismo tamaño y forma". La excepción está ocurriendo en este punto del código;

Excel.Range from = currentFind.EntireRow;
Excel.Range to = oSheet.get_Range("A2:A2500");

Creo que necesito usar la celda activa y las propiedades de la hoja activa.

¡Por favor, ayúdame!

public void btnLoad_Click(object sender, EventArgs e)
{
Excel.Application oXL;
Excel._Workbook oWB;
Excel._Worksheet oSheet;
if (dmCheck.IsChecked == true && fldCheck.IsChecked == true)
{
oXL = new Excel.Application();
oXL.Visible = true;
oWB = (Excel._Workbook)(oXL.Workbooks.Add());
oSheet = (Excel._Worksheet)oWB.ActiveSheet;
string dXLPath = @"N:/DAILY2.xlsx";
Excel.Workbook dWB = oXL.Workbooks.Open(dXLPath);
Excel.Worksheet dSheet = dWB.Worksheets.get_Item(1);
Excel.Range dRng = dSheet.get_Range("B1");
dRng.EntireColumn.Hidden = true;
Excel.Range currentFind = null;
Excel.Range firstFind = null;
Excel.Range taskHazpoi = dSheet.get_Range("A2", "A2500");
currentFind = taskHazpoi.Find("HAZPOI", Type.Missing, Excel.XlFindLookIn.xlValues, Excel.XlLookAt.xlPart, Excel.XlSearchOrder.xlByRows, Excel.XlSearchDirection.xlNext, false, Type.Missing, Type.Missing);
while(currentFind != null)
{
if (firstFind == null)
{
firstFind = currentFind;
}
else if (currentFind.get_Address(Excel.XlReferenceStyle.xlA1) == firstFind.get_Address(Excel.XlReferenceStyle.xlA1))
{
break;
}
Excel.Range from = currentFind.EntireRow;
Excel.Range to = oSheet.get_Range("A2:A2500");
from.Cut(to);
currentFind = taskHazpoi.FindNext(currentFind);
}
else if (dmCheck.IsChecked == false && fldCheck.IsChecked == false)
{
MessageBox.Show("Please check the DM and Flood box", "Report Loader");
}

Respuestas

0 para la respuesta № 1

Te recomiendo que uses Epplus en lugar de la interoperabilidad de Excel (lo usé). Ventajas:

  • No requiere paquete de office instalado en el sistema.

  • No hay instancia de Excel en la memoria.

  • Métodos más claros.

Ejemplo de uso:

http://zeeshanumardotnet.blogspot.com.es/2011/06/creating-reports-in-excel-2007-using.html?m=1

Lo encontraste en Nuget.

Saludos,


0 para la respuesta № 2

Intenta copiar una fila completa en el área de la celda A2: A2500, eso es lo que desencadena la excepción.

Para el rango "a", tome oSheet.get_Range("A2").EntireRow o oSheet.get_Range("A:A").