生成excel之后并打开excel问题“另一个程序正在使用此文件,进程无法访问。”

a2068879 2010-04-21 09:14:22
点击事件里面添加一个生成excel之后自动打开excel,excel不关闭情况下 再次点击就会出现“另一个程序正在使用此文件,进程无法访问。” 应该关闭的 我都关闭了 请大家帮忙看看 还有什么地方没关
代码如下:

import java.awt.*;
import java.awt.event.*;
import java.io.*;
import javax.swing.*;
import javax.swing.table.*;
public class ExcelExporter {
//public ExcelExporter() { }
public void exportTable(JTable table, File file) throws IOException {
TableModel model = table.getModel();

FileWriter out = new FileWriter(file);
//写入table
for(int i=0; i < model.getColumnCount(); i++) {
out.write(model.getColumnName(i) + "\t");
}
out.write("\n");
for(int i=0; i< model.getRowCount(); i++) {
for(int j=0; j < model.getColumnCount(); j++) {
out.write(model.getValueAt(i,j).toString()+"\t");
}
out.write("\n");
}


out.close();
System.out.println("write out to: " + file);
}


public static void main(String[] args) {
String[][] data = {
{ "Housewares", "1275.00" },
{ "Pets", "125.00" },
{ "Electronics", "2533.00" },
{ "Mensware", "497.00" }
};


String[] headers = { "Department", "Daily Revenue" };

JFrame frame = new JFrame("JTable to Excel Hack");

DefaultTableModel model = new DefaultTableModel(data,headers);


final JTable table = new JTable(model);


JScrollPane scroll = new JScrollPane(table);

JButton export = new JButton("Export");
export.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
int i=0;
try {
ExcelExporter exp = new ExcelExporter();
exp.exportTable(table,table1, new File( "C:\\results"+i+".xls"));
//生成EXCEL后打开

String addr = "C:\\results"+i+".xls";
Runtime.getRuntime().exec( "cmd /c start "+addr);



i++;

} catch (IOException ex) {

System.out.println(ex.getMessage());
ex.printStackTrace();
}
}
});

frame.getContentPane().add("Center",scroll);
frame.getContentPane().add("South",export);
frame.pack();
frame.setVisible(true);



}

}


...全文
2101 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
justlearn 2010-04-21
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 zuoguodang 的回复:]
你程序退出了吗,请确定程序退出了。
[/Quote]
他就是要在程序不退的情况下,按2次按钮,打开2次同一个文件
zuoguodang 2010-04-21
  • 打赏
  • 举报
回复
你程序退出了吗,请确定程序退出了。
justlearn 2010-04-21
  • 打赏
  • 举报
回复
2007下个03的补丁包就可以了。
excel已经打开了,你自然不能再打开往里面写东西了
a2068879 2010-04-21
  • 打赏
  • 举报
回复
代码有的忘删了 没有i 和table1

在excel打开的情况下怎么再次打开这个文件

还有个就是兼容问题 我用2007打开的时候提示文件已被损坏让我选择 是 还是 否 但是里面数据是一样的
justlearn 2010-04-21
  • 打赏
  • 举报
回复
因为你的i定义在action里面,当第二次点击时,他还是从0开始,并不是你+1的值。所以打开的一直是result0.xls这个文件
closewbq 2010-04-21
  • 打赏
  • 举报
回复
应该没有问题。
exp.exportTable(table,table1, new File( "C:\\results"+i+".xls"));
table1是哪来的
a2068879 2010-04-21
  • 打赏
  • 举报
回复
try { b = Character.toString(c).getBytes("ansi");}
这个地方贴错了 应该是 try { b = Character.toString(c).getBytes("utf-8");}
a2068879 2010-04-21
  • 打赏
  • 举报
回复
我用这种方法转换一下字符串 可是还乱码 有谁知道怎么弄?
public   static  String toUtf8String(String s){ 
StringBuffer sb = new StringBuffer();
for ( int i = 0 ;i < s.length();i ++ ){
char c = s.charAt(i);
if (c >= 0 && c <= 255 ){sb.append(c);}
else {
byte [] b;
try { b = Character.toString(c).getBytes("ansi");}
catch (Exception ex) {
System.out.println(ex);
b = new byte [ 0 ];
}
for ( int j = 0 ; j < b.length; j ++ ) {
int k = b[j];
if (k < 0 ) k += 256 ;
sb.append("%"+ Integer.toHexString(k).toUpperCase());
}
}
}
return sb.toString();
}
a2068879 2010-04-21
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 justlearn 的回复:]
2007下个03的补丁包就可以了。
excel已经打开了,你自然不能再打开往里面写东西了
[/Quote]
但是我看别的程序里面有过这样的操作啊 同时打开一个文件应该是可以的啊

现在中文又乱码 头疼

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧