2009-11-07 6 views
1

J'utilise DSOFile.OleDocumentPropertiesClass pour obtenir le nombre de pages pour les documents Office sans automatisation. Cela fonctionne bien pour les fichiers docx et pptx, mais renvoie toujours 0 pour les fichiers xlsx.Problème Obtenir le nombre de pages pour les documents office (excel) à l'aide de DSOFile.OleDocumentPropertiesClass

DSOFile.OleDocumentPropertiesClass oleDocument = new DSOFile.OleDocumentPropertiesClass(); 
oleDocument.Open(documentFilePath, true, DSOFile.dsoFileOpenOptions.dsoOptionOpenReadOnlyIfNoWriteAccess); 

//WORKS FOR DOCX 
int pageCount = oleDocument.SummaryProperties.PageCount; 


//WORKS FOR PPTS 
int pageCount = oleDocument.SummaryProperties.SheetCount; 

//NONE OF ABOVE WORKS FOR XLSX, IT ALWAYS RETURNS 0 

Répondre

0

Je automatisation utilisé pour les fichiers Excel et fichier DSO pour d'autres formats, Comme je ne peux pas Fild toute solution concernant ce .

0

bien, Dsofile ne fonctionne pas pour moi non plus, comme alternative, vous pouvez utiliser OleDB pour se connecter à un fichier xls (x) et d'obtenir les détails de contenu. Voici un exemple:

OleDbConnection connection = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\1.xlsx;Extended Properties=Excel 8.0"); 
connection.Open(); 
DataTable dataTable = connection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null); 

if (dataTable == null) return; 

foreach (DataColumn column in dataTable.Columns) 
    Console.Write(column.ColumnName + '\t'); 
Console.Write('\n'); 
foreach (DataRow row in dataTable.Rows) 
{ 
    foreach (DataColumn column in dataTable.Columns) 
    Console.Write(row[column].ToString() + '\t'); 
    Console.Write('\n'); 
} 

assurez-vous juste que vous avez le pilote du système Office 2007 (Microsoft.ACE.OLEDB.12.0 fournisseur OLEDB) installé

si vous traitez uniquement avec des feuilles de calcul Excel 2007, vous pouvez envisager d'utiliser ExcelPackage (http://excelpackage.codeplex.com/) outil, il devrait être en mesure de lire les données à partir de la feuille de calcul Excel sans automatisation

+0

La solution OleDB fonctionne très bien pour les fichiers Excel en lecture/écriture. mais ici, je veux que la page compte quand le document est imprimé à partir d'une imprimante souple. Cela ne marchera pas pour moi. J'essaie d'éviter l'automatisation Problème: L'utilisateur devrait pouvoir télécharger n'importe quel type de document (doc, docx, ppt, pptx, xls, xlsx, images, pdf) et il sera converti en swf par un processus, et enfin que swf est utilisé dans l'application. Maintenant, nous avons une situation où nous voulons interdire à l'utilisateur de télécharger plusieurs documents de la page. donc nous utilisons le fichier dso cela fonctionne bien pour les autres formats restants xls et xlsx. – Lalit

+1

jeter un oeil à ce lien http://npoi.codeplex.com/, cette chose pourrait vous aider avec ce que vous essayez de faire. Aussi, je ne pense pas que vous seriez en mesure d'obtenir le nombre de pages de xls, plus probablement un certain nombre de feuilles. La pagination pour chaque feuille est faite à la volée avant l'impression. Avec l'automatisation, vous pouvez le faire en appelant ExecuteExcel4Macro avec la commande GET.DOCUMENT (50, \ "your_sheet_name \") –

Questions connexes