2011-11-09 16 views
9

Sto provando a creare un file Excel con interoperabilità C# COM ma sembra che lo crei di default con 3 fogli anziché vuoto o solo uno. Ciò che è necessario per crearlo vuoto o solo con uno:C# Crea cartella di lavoro Excel con 1 foglio per impostazione predefinita

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

Credo che questo sia il comportamento predefinito in Excel. Se apri Excel e crei un nuovo documento, ha tre fogli. Forse hai solo bisogno di cancellare i fogli due e tre. –

+0

Oppure puoi cimentarti in una semplice libreria NPOI http://code.google.com/p/npoi/ semplice da usare che ti offre un sacco di flessibilità, specialmente per le funzionalità di Excel di base e intermedio. Se il tuo output deve essere aperto solo da Office 2010 o versioni successive, puoi anche considerare OpenXML. È probabile che l'interoperabilità di COM fornisca un sacco di problemi nelle applicazioni client non interattive e non interattive. Vedere questo http://support.microsoft.com/kb/257757 –

risposta

20

Date un'occhiata a spiegazione di MSDN di Workbooks.Add Method.

  1. Prova Workbooks.Add(XlWBATemplate.xlWBATWorksheet), o
  2. vedere se è possibile impostare la proprietà xl.SheetsInNewWorkbook-0 o 1.

sono andato avanti e verificato questo. Ecco il codice:

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

Ho usato l'opzione 2: "xl.SheetsInNewWorkbook = 1" e questo risolve il problema. – Moti

+0

@Moti, felice di aiutare. Vedendo il tuo nuovo qui, se la risposta è corretta, è consuetudine accettare la risposta (controlla il segno di spunta). Inoltre, le risposte utili possono essere anche votate (freccia su). :) – Matt

+0

Sembra che non posso rispondere alla domanda per almeno 8 ore come ho "• Gli utenti con meno di 100 reputazione non possono rispondere alla propria domanda per 8 ore dopo aver chiesto. È possibile auto-rispondere in 7 ore. Fino ad allora, per favore usa i commenti o modifica la tua domanda ". – 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)); 
Problemi correlati