2011-11-09 35 views
9

Estoy tratando de crear un archivo de Excel con interoperabilidad C# COM pero parece que lo crea de forma predeterminada con 3 hojas en lugar de estar vacío o solo una. Lo que se necesita para crear vacío o sólo con una:C# Crear libro de Excel con 1 hoja de forma predeterminada

Excel.Application xl = null; 
Excel._Workbook wb = null; 

// Create a new instance of Excel from scratch 
xl = new Excel.Application(); 
xl.Visible = true;  
wb = (Excel._Workbook)(xl.Workbooks.Add(Missing.Value)); 

wb.SaveAs(@"C:\a.xls", Excel.XlFileFormat.xlWorkbookNormal, 
null, null, false, false, Excel.XlSaveAsAccessMode.xlShared, 
false, false, null, null, null); 
+2

Creo que este es el comportamiento por defecto en Excel. Si abre Excel y crea un documento nuevo, tiene tres hojas. Tal vez solo necesites borrar las hojas dos y tres. –

+0

O puede probar su mano en una biblioteca simple pero manual de NPOI http://code.google.com/p/npoi/ que le ofrece mucha flexibilidad, especialmente para las funciones básicas a intermedias de Excel. Si solo necesita abrir su salida desde Office 2010 o posterior, también puede considerar OpenXML. Es probable que COM Interop le proporcione muchos problemas en aplicaciones de cliente desatendidas y no interactivas. Vea esto http://support.microsoft.com/kb/257757 –

Respuesta

20

Tome un vistazo a la explicación de MSDN de Workbooks.Add Method.

  1. Trate Workbooks.Add(XlWBATemplate.xlWBATWorksheet) o
  2. ver si se puede establecer la propiedad xl.SheetsInNewWorkbook a 0 ó 1.

seguí adelante y verificado esto. Aquí está el código:

using Microsoft.Office.Interop.Excel; 
using System.Reflection; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      Application xl = null; 
      _Workbook wb = null; 

      // Option 1 
      xl = new Application(); 
      xl.Visible = true; 
      wb = (_Workbook)(xl.Workbooks.Add(XlWBATemplate.xlWBATWorksheet)); 

      // Option 2 
      xl = new Application(); 
      xl.SheetsInNewWorkbook = 1; 
      xl.Visible = true; 
      wb = (_Workbook)(xl.Workbooks.Add(Missing.Value)); 

     } 
    } 
} 
+3

Utilicé la opción 2: "xl.SheetsInNewWorkbook = 1" y eso resuelve el problema. – Moti

+0

@Moti, me alegra ayudar. Al ver su nuevo aquí, si la respuesta es correcta, es costumbre aceptar la respuesta (marque la casilla de verificación). Además, las respuestas útiles también se pueden votar (la flecha hacia arriba). :) – Matt

+0

Parece que no puedo responder a la pregunta durante al menos 8 horas ya que tengo "• Los usuarios con menos de 100 de reputación no pueden responder a su propia pregunta durante 8 horas después de preguntar. Usted puede auto-responder en 7 horas. Hasta entonces, use comentarios o edite su pregunta en su lugar ". – Moti

2
Excel.Application xl = null; 
Excel._Workbook wb = null; 

xl = new Excel.Application(); 
xl.SheetsInNewWorkbook = 1; 
xl.Visible = true; 

wb = (_Workbook)(xl.Workbooks.Add(Missing.Value)); 
Cuestiones relacionadas