我从我的系统中导出一些数据。我想在Excel图表中将这些数据集可视化。我发现并解决了问题,找到了解决方案。当我更改数据字段时,图表应该重绘,我猜这是excel标准。在Excel文件中创建Excel图表
我认为它可能以这种方式工作:
- 出口数据
- 手动创建与MS-Excel的图表
- 保存,并在所有其它未来出口加载这个为模板
你知道如何用POI使用Java吗?特别是图表的导入作为模板?
我从我的系统中导出一些数据。我想在Excel图表中将这些数据集可视化。我发现并解决了问题,找到了解决方案。当我更改数据字段时,图表应该重绘,我猜这是excel标准。在Excel文件中创建Excel图表
我认为它可能以这种方式工作:
你知道如何用POI使用Java吗?特别是图表的导入作为模板?
截至目前作为apache POI limitation是说“您当前无法创建图表。但是,您可以在Excel中创建一个图表,使用HSSF修改图表数据值和出谱写新的电子表格。这是可能的,因为POI尝试尽可能保持现有记录完整“。
但在我的情况下,我已经使用命名范围在Excel表单上手动创建了一个图表,并且使用java,我按照我的要求更新了命名范围。由于该图表基于命名范围,所以它也会更新。
对于更新用请here
POI不给你说的功能,但你可以使用j个XL或阅读Aspose细胞(阅读Aspose是不是免费的)转换或复制图表(图)。
这是代码片段来提取Excel图表对图像
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);
}
}
我用Ĵ的excel
由于Sankumarsingh,我一直具有POI创建的Excel的文档从头。你能解释一下,如何加载一个现有的.xls文件? –
加载与创建一样简单。您可以从http://stackoverflow.com/a/17709121/624003获取帮助 – Sankumarsingh