2010-03-22 5 views
2

У меня есть серия электронных таблиц Excel, каждая из которых содержит по крайней мере одну страницу данных и одну страницу диаграммы, созданной из данных. Мне нужно захватить (не восстанавливать данные) существующая диаграмма как веб-изображение. Возможно ли это через Java или .Net? Я знаю, что POI-материал (Java) этого не сделает (или, как мне сказали, сам не пробовал).Как экспортировать графики из Excel в виде графики

ответ

2

Вы пробовали с помощью метода Chart.Export?

Пример в помощи является:

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

Из памяти, я думаю, что вы можете экспортировать в PNG, а также.

1

Картинговые изображения не хранятся в книгах, поэтому вам нужен компонент, который может отображать графики, совместимые с Excel.

позволит загружать книги Excel, необязательно подключать новые значения/формулы/форматы/etc ..., вычислять, а затем получать изображение из диапазона ячеек или из графика.

Вы можете увидеть несколько образцов here и загрузить бесплатную пробную версию here, если вы хотите попробовать сами.

Отказ от ответственности: У меня есть SpreadsheetGear ООО

1

Вы можете конвертировать или копировать графики (графики) с помощью J XL или Aspose Cells (Aspose не является бесплатным).

Это фрагмент кода, чтобы извлечь диаграмму первенствовать изображения

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); 
    } 

} 

я использовал J Excel

+0

Что такое применение excelApp = новое приложение(); ? Я не вижу этого в JExcel API. И что такое «excelApp.getOleMessageLoop(). DoInvokeAndWait (new Runnable()» Пожалуйста, подумайте над тем, чтобы дать соответствующие комментарии в коде, чтобы помочь другим понять. –

Смежные вопросы