Excel Interop Save as dà il controllo di compatibilità in excel 2007

Ecco il mio codice per il metodo SaveAs :

 m_FilePath="D:\Build\abc.xlsx" m_objOpt=System.Reflection.Missing.Value; m_objBook.SaveAs(m_FilePath, m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt, XlSaveAsAccessMode.xlShared, m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt); 

Ora la mia domanda non è come distriggersre la compatibilità checker, che è già stata risolta molte volte. La mia domanda è il motivo per cui il verificatore di compatibilità sta per arrivare. Come fa l'eccellenza a sapere che il file ha le tracce di excel 2003. D: \ Build è vuoto.

Se si desidera creare una versione specifica del file Excel, è necessario impostare il file di file corretto nel metodo SaveAs .

Anche se si imposta il file .xls nel path, se il formato di file non è specificato, verrà utilizzata la versione in esecuzione di Excel per salvare il file utilizzando il metodo SaveAs . Ciò significa che se si apre un file Excel 1997-2003 con Excel 2007 o superiore, il metodo SaveAs salva per impostazione predefinita il file come file di Excel 2007 se non si imposta il parametro FileFormat .

Oggetto opzionale. Il formato di file da utilizzare quando si salva il file. Per un elenco di scelte valide, vedere la properties; FileFormat. Per un file esistente, il formato predefinito è l'ultimo formato di file specificato; per un nuovo file, il valore predefinito è il formato della versione di Excel in uso .


Quale dovrebbe essere il mio FileFormat allora se voglio salvare sia nel 2003 che nel 2007 a seconda di quale excel è installato nel sistema?

Non impostare il formato di file come fai o xlWorkbookDefault è il formato di file da utilizzare se si desidera salvare sia nel 2003 che nel 2007 a seconda di quale Excel è installato nel sistema.

È necessario rilevare la versione corrente di Excel per impostare l'estensione corretta (.xls o .xlsx) nel nome del file . Se l'estensione non corrisponde al fileFormat reale utilizzato, avrai un messaggio che dice che l'estensione non corrisponde al formato di file quando apri il file.

Oppure , la soluzione che si propone sembra non impostare l'estensione in fileName e consentire a Excel di completare il fileName con l'estensione corretta in base al fileFormat specificato dopo aver rilevato la versione di Excel. Qui stai utilizzando:

  • 56: xlExcel8 Excel8
  • 46: formato di foglio di calcolo Excel xlXMLSpreadsheet .

Link su FileFormat


Notare inoltre che non impedirà che il controllo di compatibilità venga visualizzato se si utilizza una funzionalità di Excel 2007 in un file di Excel 2003. Per hide il messaggio, è ansible impostare la properties; Application.DisplayAlerts su false .

Ho fatto qualcosa di simile:

 if (11.0 < Convert.ToDouble(report.Version)) { //For excel 2003 workbook.SaveAs(filename, 56, Missing.Value, Missing.Value, Missing.Value, Missing.Value, XlSaveAsAccessMode.xlShared, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value); } else { //For excel 2007 and above workbook.SaveAs(filename, 51, misval, misval, misval, misval, XlSaveAsAccessMode.xlShared, misval, misval, misval, misval, misval); }