insertar - leer excel c#
Interoperabilidad de Excel: agregue una nueva hoja de trabajo después de todas las demás (3)
Intento agregar una nueva hoja de trabajo a un libro de Excel y convertirla en la última hoja de cálculo del libro en C # Interoperabilidad de Excel.
Parece realmente simple, y pensé que el siguiente código lo haría:
using System.Runtime.InteropServices;
using Excel = Microsoft.Office.Interop.Excel;
namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
var excel = new Excel.Application();
var workbook = excel.Workbooks.Open(@"C:/test/Test.xlsx");
workbook.Sheets.Add(After: workbook.Sheets.Count);
workbook.Save();
workbook.Close();
Marshal.ReleaseComObject(excel);
}
}
}
No tal suerte. Obtengo este útil error:
COMException no fue controlada - Excepción de HRESULT: 0x800A03EC
Encontré esta página en Microsoft.com que sugería que intentara agregar la hoja primero y luego moverla, así que lo intenté como se muestra a continuación. Sé que esta página web se dirige a Excel 95 pero el VBA aún está ahí para usar, así que esperaba que aún funcionara:
using System.Runtime.InteropServices;
using Excel = Microsoft.Office.Interop.Excel;
namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
var excel = new Excel.Application();
var workbook = excel.Workbooks.Open(@"C:/test/Test.xlsx");
workbook.Sheets.Add();
workbook.Sheets.Move(After: workbook.Sheets.Count);
workbook.Save();
workbook.Close();
Marshal.ReleaseComObject(excel);
}
}
}
Recibo el mismo error que el anterior. También he intentado pasar el nombre de mi última hoja de trabajo como una cadena como el parámetro After
en los métodos Add
y Move
, ¡no me gusta!
Eso es lo que he intentado, entonces mi pregunta es ¿cómo agrego una hoja de trabajo a un libro de trabajo de Excel y la hago la última hoja en el libro de trabajo usando C # Interoperación de Excel?
Gracias
Esto debería hacer el trabajo:
wSheet.Move(Missing.Value, workbook.Sheets[workbook.Sheets.Count]);
Mirando la documentación aquí http://msdn.microsoft.com/en-us/library/microsoft.office.tools.excel.worksheet.move(v=vs.80).aspx , indica que el objeto ''después'' no es una posición numérica; es el objeto que representa la hoja en la que desea colocar su hoja. El código probablemente debería ser algo así como (no probado):
workbook.Sheets.Add(After: workbook.Sheets[workbook.Sheets.Count]);
Esta es la única forma que funciona para mí:
xlWorkSheet = (Microsoft.Office.Interop.Excel.Worksheet)xlWorkBook.Worksheets.Add
(System.Reflection.Missing.Value,
xlWorkBook.Worksheets[xlWorkBook.Worksheets.Count],
System.Reflection.Missing.Value,
System.Reflection.Missing.Value);