将报表导出为xml。
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

105 lines
4.1 KiB

package com.fr.plugin.export.xml.exporter;
import com.fanruan.api.log.LogKit;
import com.fanruan.api.report.PrintKit;
import com.fanruan.api.report.export.BaseAppExporter;
import com.fanruan.api.util.GeneralKit;
import com.fanruan.api.util.StringKit;
import com.fr.base.Style;
import com.fr.main.workbook.ResultWorkBook;
import com.fr.page.ClippedPageProvider;
import com.fr.page.PageSetProvider;
import com.fr.page.PaperSettingProvider;
import com.fr.page.ReportPageProvider;
import com.fr.plugin.context.PluginContexts;
import com.fr.report.cell.CellElement;
import com.fr.report.elementcase.ElementGetter;
import com.fr.report.report.ECReport;
import com.fr.report.report.ResultReport;
import com.fr.stable.EncodeConstants;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.text.Format;
import java.util.Iterator;
import java.util.List;
/**
* Created by richie on 16/1/21.
*/
public class XmlExporter extends BaseAppExporter {
@Override
public void export(OutputStream out, ResultWorkBook book) throws Exception {
List paperSettingList = PrintKit.getPaperSettings(book);
for (int i = 0, len = book.getReportCount(); i < len; i++) {
this.export(out, book.getResultReport(i), (PaperSettingProvider) paperSettingList.get(i));
}
}
@Override
public void export(java.io.OutputStream out, PageSetProvider pageSet) throws Exception {
for (int i = 0; i < pageSet.size(); i++) {
ReportPageProvider reportPage = pageSet.getPage(i);
ClippedPageProvider page = PrintKit.pick(reportPage);
if (page == null) {
break;
}
this.exportReport(out, (ElementGetter) page, 0, (page).getRowCount());
}
}
private void export(OutputStream out, ResultReport report, PaperSettingProvider paperSetting)
throws Exception {
if (report != null) {
LogKit.info("UnLayerReport start export");
exportReport(out, (ECReport) report, 0, (report).getRowCount());
}
}
public void exportReport(OutputStream out, ElementGetter reportCase, int start, int end) throws Exception {
if (PluginContexts.currentContext().isAvailable()) {
PrintWriter writer = new PrintWriter(new OutputStreamWriter(out, EncodeConstants.ENCODING_UTF_8));
StringBuilder xmlBuffer = new StringBuilder();
xmlBuffer.append("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>");
xmlBuffer.append("<report>");
for (int row = start; row < end; row++) {
xmlBuffer.append("<row>");
Iterator it = reportCase.getRow(row);
while (it.hasNext()) {
xmlBuffer.append("<col>");
String exportText;
CellElement cell = (CellElement) it.next();
if (cell == null) {
exportText = StringKit.EMPTY;
} else {
boolean export = PrintKit.isCellPrintable(cell);
if (export) {
Object value = cell.getValue();
Style style = cell.getStyle();
if (style != null) {
Format format = style.getFormat();
exportText = Style.valueToText(value, format);
} else {
exportText = GeneralKit.objectToString(value);
}
} else {
exportText = StringKit.EMPTY;
}
}
xmlBuffer.append(exportText);
xmlBuffer.append("</col>");
}
xmlBuffer.append("</row>");
}
xmlBuffer.append("</report>");
writer.println(xmlBuffer.toString());
writer.flush();
} else {
throw new RuntimeException("XML Export Plugin License Expired!");
}
}
}