2010-03-22 4 views
2

J'ai une série de feuilles de calcul Excel contenant chacune au moins une page de données et une page de graphique créée à partir des données. Je dois capturer (pas régénérer à partir des données) le tableau existant comme une image Web amicale. Est-ce possible via Java ou .Net? Je sais que les choses POI (Java) ne le feront pas (ou du moins on me dit, je ne l'ai pas essayé moi-même).Comment exporter des graphiques à partir d'Excel en tant que graphiques

Répondre

2

Avez-vous essayé d'utiliser la méthode Chart.Export?

L'exemple de l'aide est:

Worksheets("Sheet1").ChartObjects(1).Chart. Export _ 
FileName:="current_sales.gif", FilterName:="GIF" 

De mémoire, je pense que vous pouvez exporter en PNG ainsi.

1

Les images de graphique ne sont pas stockées dans les classeurs, vous avez donc besoin d'un composant capable de générer des diagrammes compatibles Excel.

vous permettra de charger des classeurs Excel, éventuellement ajouter de nouvelles valeurs/formules/formats/etc ..., calculer, puis obtenir une image à partir d'une plage de cellules ou d'un graphique.

Vous pouvez voir quelques exemples here et télécharger l'essai gratuit here si vous voulez l'essayer vous-même.

Disclaimer: Je possède SpreadsheetGear LLC

1

Vous pouvez convertir ou copier des graphiques (graphiques) à l'aide de J XL ou de cellules Aspose (Aspose n'est pas libre).

C'est l'extrait de code pour extraire graphique Excel à l'image

public class ExportChartToImage 
{ 
    public static void main(String[] args) throws Exception 
    { 
     //Start Excel 
     Application excelApp = new Application(); 
     excelApp.setVisible(true); 

     //Create test workbook 
     Workbook workbook = excelApp.createWorkbook("/home/tejus/Desktop/Chart Test"); 

     //Get the first (and the only) worksheet 
     final Worksheet worksheet1 = workbook.getWorksheet(1); 

     //Fill-in the first worksheet with sample data 
     worksheet1.getCell("A1").setValue("Date"); 
     worksheet1.getCell("A2").setValue("March 1"); 
     worksheet1.getCell("A3").setValue("March 8"); 
     worksheet1.getCell("A4").setValue("March 15"); 

     worksheet1.getCell("B1").setValue("Customer"); 
     worksheet1.getCell("B2").setValue("Smith"); 
     worksheet1.getCell("B3").setValue("Jones"); 
     worksheet1.getCell("B4").setValue("James"); 

     worksheet1.getCell("C1").setValue("Sales"); 
     worksheet1.getCell("C2").setValue("23"); 
     worksheet1.getCell("C3").setValue("17"); 
     worksheet1.getCell("C4").setValue("39"); 

     excelApp.getOleMessageLoop().doInvokeAndWait(new Runnable() 
     { 
      public void run() 
      { 
       final Variant unspecified = Variant.createUnspecifiedParameter(); 
       final Int32 localeID = new Int32(LocaleID.LOCALE_SYSTEM_DEFAULT); 

       Range sourceDataNativePeer = worksheet1.getRange("A1:C4").getPeer(); 
       _Worksheet worksheetNativePeer = worksheet1.getPeer(); 

       IDispatch chartObjectDispatch = worksheetNativePeer.chartObjects(unspecified, localeID); 

       ChartObjectsImpl chartObjects = new ChartObjectsImpl(chartObjectDispatch); 
       ChartObject chartObject = chartObjects.add(new DoubleFloat(100), new DoubleFloat(150), new DoubleFloat(300), new DoubleFloat(225)); 

       _Chart chart = chartObject.getChart(); 
       chart.setSourceData(sourceDataNativePeer, new Variant(XlRowCol.xlRows)); 

       BStr fileName = new BStr("/home/tejus/Desktop/chart.gif"); 
       Variant filterName = new Variant("gif"); 
       Variant interactive = new Variant(false); 

       chart.export(fileName, filterName, interactive); 

       chart.setAutoDelete(false); 
       chart.release(); 

       chartObject.setAutoDelete(false); 
       chartObject.release(); 

       chartObjects.setAutoDelete(false); 
       chartObjects.release(); 

       chartObjectDispatch.setAutoDelete(false); 
       chartObjectDispatch.release(); 
      } 
     }); 

     System.out.println("Press 'Enter' to terminate the application"); 
     System.in.read(); 

     //Close the MS Excel application. 
     boolean saveChanges = false; 
     workbook.close(saveChanges); 
     boolean forceQuit = true; 
     excelApp.close(forceQuit); 
    } 

} 

i utilisé J Excel

+0

Qu'est-ce que l'application excelApp = new Application(); ? Je ne peux pas voir cela dans l'API JExcel. Et qu'est-ce que "excelApp.getOleMessageLoop(). DoInvokeAndWait (new Runnable()" S'il vous plaît envisager de donner des commentaires appropriés dans le code pour aider les autres à comprendre. –

Questions connexes