我正在创建一个网络应用,我想在结果中显示一个excel图标。当用户点击图标时,它应该在客户端机器上打开一个电子表格,其中一些数据由服务器发送(客户端将安装excel)。
我写了一些代码,通过webservice在我的本地机器上创建excel。
public class App
{
public static void main( String[] args )
{
try {
URL oracle = new URL("http://someService.com");
URLConnection yc =null;
yc = oracle.openConnection();
//Get the workbook instance for XLS file
HSSFWorkbook workbook = new HSSFWorkbook();
HSSFSheet sheet = workbook.createSheet("Sample sheet");
BufferedReader in = new BufferedReader(
new InputStreamReader(
yc.getInputStream()));
String inputLine;
int rowNum =0;
while ((inputLine = in.readLine()) != null) {
Row row = sheet.createRow(rowNum++);
String[] coloumns = inputLine.split("\t");
int cellNum =0;
for(String coloumn: coloumns){
coloumn.
Cell cell = row.createCell(cellNum++);
cell.setCellValue(coloumn);
}
System.out.println(inputLine);
}
in.close();
FileOutputStream out =
new FileOutputStream(new File("C:\\libraries\\new.xls"));
workbook.write(out);
out.close();
System.out.println("Excel written successfully..");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
这很好用。 它只是读取来自Web服务的数据,并在我的机器上的C:\ libraries \ new.xls中创建一个电子表格。
现在,如果我在网络应用程序上,我想在客户端计算机上打开电子表格。我没有保存表格。只需打开数据即可。
如何使用来自网络服务的数据在客户端计算机上打开电子表格?
修改
这是我的新服务器代码:
@RequestMapping(value = "/Excel")
public void getFile(HttpServletResponse response){
OutputStream out =null;
try {
out = response.getOutputStream();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
response.setContentType("application/x-ms-excel");
try {
URL oracle = new URL("http://someService.com");
URLConnection yc =null;
yc = oracle.openConnection();
//Get the workbook instance for XLS file
IOUtils.copy(yc.getInputStream(),out);
out.flush();
System.out.println("Excel written successfully..");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
所以现在我运行了网络应用程序并没有发生任何事情?我应该在前端做一些事情来调用这个流。
答案 0 :(得分:2)
您可以在Spring MVC控制器中执行类似的操作,将文件发送到客户端的计算机:
@RequestMapping(value = "/myexcelreport")
public void getFile(
HttpServletResponse response) {
OutputStream out=response.getOutputStream();
response.setContentType("application/x-ms-excel");
... Same code a before, just use out instead of a FileOutputStream , and don't close out.
out.flush();
}