jxl读取excel生成txt文件

rightxiang 2011-10-13 07:57:33
现在需要做个需求就是 用jxl读取excel文件里所需的单元格信息生成txt文件 但不是全部读取 只读取所需的单元格信息 并且有的单元格还是合并的单元格 这么弄啊 弄了一天了 也没找到 请大家指点指点 thank you !!!!
...全文
254 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
rightxiang 2011-10-14
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 fuwenhai 的回复:]

先用jxl包把数据读出来啊,然后将读出的数据利用IO流写到txt文件中
//根据路径创建File对象
File file = new File(filePath);
//根据选择的Excel文件创建Workbook对象
Workbook book = Workbook.getWorkbook(file);
……
[/Quote]

现在的要求整个excel都读出来 只读取需要的单元格 并且还是合并的单元格 这么搞啊
luyun2011 2011-10-14
  • 打赏
  • 举报
回复
先用jxl包把数据读出来啊,然后将读出的数据利用IO流写到txt文件中
//根据路径创建File对象
File file = new File(filePath);
//根据选择的Excel文件创建Workbook对象
Workbook book = Workbook.getWorkbook(file);
//取得第一张sheet表
Sheet sheet = book.getSheet(0);
//总行数
int rows=sheet.getRows();
//总列数
int cols=sheet.getColumns();
//读取每行每列
for(int i=0;i<rows;i++){
for(int j=0;j<cols;j++){
String content1=sheet.getCell(j, i).getContents();
...
调用方法写入txt文件即可
}
}
rightxiang 2011-10-14
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 kouyisc 的回复:]

给你一段 我用jxl读取excel生成txt的代码:
/**
* 读取xls文件到set
*
* @throws Exception
*/
public static Set<String> readXlsfile(File filePath) {

Set<String> set = new HashSet<String>();
try {
// long l = Sys……
[/Quote]

读取合并的单元格呢
rightxiang 2011-10-14
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 ioe_gaoyong 的回复:]
什么是你需要的单元格,你好像听不懂中国话

引用 8 楼 rightxiang 的回复:

引用 7 楼 ioe_gaoyong 的回复:
什么是 “需要的单元格”

引用 6 楼 rightxiang 的回复:

引用 4 楼 ioe_gaoyong 的回复:

你自己不说清楚 什么是你所谓的“所需的单元格”,别人怎么帮你

你解释一下吧


不是全部读取 只提……
[/Quote]

这么多人就你不明白
  • 打赏
  • 举报
回复
用Poi不行么?可以指定要读哪个单元格。。。
风尘中国 2011-10-14
  • 打赏
  • 举报
回复

什么是你需要的单元格,你好像听不懂中国话

[Quote=引用 8 楼 rightxiang 的回复:]

引用 7 楼 ioe_gaoyong 的回复:
什么是 “需要的单元格”

引用 6 楼 rightxiang 的回复:

引用 4 楼 ioe_gaoyong 的回复:

你自己不说清楚 什么是你所谓的“所需的单元格”,别人怎么帮你

你解释一下吧


不是全部读取 只提取需要的单元格的内容


一般都是全部读取出来吧 我有可能读取第七行第五列 有可能读取其他……
[/Quote]
kouyiSC 2011-10-14
  • 打赏
  • 举报
回复
给你一段 我用jxl读取excel生成txt的代码:
/**
* 读取xls文件到set
*
* @throws Exception
*/
public static Set<String> readXlsfile(File filePath) {

Set<String> set = new HashSet<String>();
try {
// long l = System.currentTimeMillis();
InputStream is = new FileInputStream(filePath);
Workbook rwb = Workbook.getWorkbook(is);
Sheet[] sheets = rwb.getSheets();// 获得当前Excel表共有几个sheet
int p = sheets.length;
// System.out.println("此表共有几个sheet------->" + p);
for (int w = 0; w < p; w++) {
// 将每个sheet中的内容全部读取出来
Sheet rs = rwb.getSheet(w);
int rows = rs.getRows();
for (int d = 1; d < rows; d++) {
// 行循环,Excel的行列是从(0,0)开始的
Cell b00 = rs.getCell(0, d);
String strb = b00.getContents();
set.add(strb);
}
}
// System.out.println("mapping执行之间:" + (System.currentTimeMillis() - l) + "毫秒");
System.out.println("长度" + set.size());
} catch (Exception e) {
System.out.println(e.getMessage());
}
return set;
}

/**
* 读取xls文件到Map
*
* @throws Exception
*/
public static HashMap<Integer, String[]> readXlsfileMap(File filePath) {

HashMap<Integer, String[]> set = new HashMap<Integer, String[]>();
try {
long l = System.currentTimeMillis();
InputStream is = new FileInputStream(filePath);
Workbook rwb = Workbook.getWorkbook(is);
Sheet[] sheets = rwb.getSheets();// 获得当前Excel表共有几个sheet
int p = sheets.length;
// System.out.println("此表共有几个sheet------->" + p);
int k = 1;
for (int w = 0; w < p; w++) {
// 将每个sheet中的内容全部读取出来
Sheet rs = rwb.getSheet(w);
int rows = rs.getRows();
for (int d = 1; d < rows; d++) {
// 行循环,Excel的行列是从(0,0)开始的
Cell b00 = rs.getCell(0, d);
String strb = b00.getContents();
set.put(k, new String[]{strb});
k ++;
}
}
//System.out.println("mapping执行之间:" + (System.currentTimeMillis() - l) + "毫秒");
//System.out.println("map长度" + set.size());
} catch (Exception e) {
System.out.println(e.getMessage());
}
return set;
}

/**
* 读取xls文件到set
*
* @throws Exception
*/
public static void readXlsfile2(InputStream is){

POIFSFileSystem fs = null;
HSSFWorkbook wb = null;
HSSFSheet sheet = null;
HSSFRow row = null;
long l = System.currentTimeMillis();
Set<String> set = new HashSet<String>();
try{
fs = new POIFSFileSystem(is);
wb = new HSSFWorkbook(fs);
}catch (Exception e) {
System.out.println(e.getMessage());
}
for (int w = 0; w < 1; w++) {
sheet = wb.getSheetAt(0);
int rowNum = sheet.getLastRowNum();
row = sheet.getRow(0);
for (int i = 1; i <= rowNum; i++) {
row = sheet.getRow(i);
set.add(row.getCell((short)0).toString());
}
}
System.out.println("mapping执行之间:" + (System.currentTimeMillis() - l) + "毫秒");
System.out.println("set长度" + set.size());
}

上面有几种方法

写入txt
/**
* 将数据写入txt文件中,并下载到本地
*/
public static void writeTxtFile(List<String> set, File file, String fileName, HttpServletResponse
response) throws Exception {

// 写入文件
if (Utils.isNull(set))
return;
BufferedWriter outp = new BufferedWriter(new FileWriter(file, true));
int k = 0;
for (String phone : set) {
k++;
outp.write(String.valueOf(phone));
outp.newLine();
if (k % 10000 == 0) {
outp.flush();
k = 0;
}
}
outp.flush();
outp.close();
outp = null;

// 下载文件
try {
fileName = "new_noblack_" + fileName;
download(file, fileName, response);
} catch (Exception e) {
// TODO Auto-generated catch block
// e.printStackTrace();
System.out.println("下载文件异常" + e.getMessage());
}
}

/**
* 将发件箱数据写入csv文件中,并下载到本地
*/
public static void writeCsvFile(List<SmsSend> set, File file, String fileName, HttpServletResponse
response) throws Exception {

SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
// 写入文件
if (Utils.isNull(set))
return;
BufferedWriter outp = new BufferedWriter(new FileWriter(file, true));
String title = "收信人,发送状态,发送时间,消息内容";
String text = "";
outp.write(title);
outp.newLine();
int k = 0;
for (SmsSend send : set) {
k++;
text = send.getSmsPhone() + "," + setStatus(send.getSmsStatusCode()) + "," +
df.format(send.getSmsTime()) + "," + send.getSmsContent();
outp.write(String.valueOf(text));
outp.newLine();
if (k % 10000 == 0) {
outp.flush();
k = 0;
}
}
outp.flush();
outp.close();
outp = null;
}

一般像你这种需求 ,都是分两步走。。。先写一个读数据的类,再写一个写数据的类。。
然后写一个总的,调用读数据的类成功后再写入数据。。。
rightxiang 2011-10-14
  • 打赏
  • 举报
回复
怎样读取合并的单元格啊
rightxiang 2011-10-14
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 ioe_gaoyong 的回复:]
什么是 “需要的单元格”

引用 6 楼 rightxiang 的回复:

引用 4 楼 ioe_gaoyong 的回复:

你自己不说清楚 什么是你所谓的“所需的单元格”,别人怎么帮你

你解释一下吧


不是全部读取 只提取需要的单元格的内容
[/Quote]

一般都是全部读取出来吧 我有可能读取第七行第五列 有可能读取其他行其他列 不是全部读到 明白??
风尘中国 2011-10-14
  • 打赏
  • 举报
回复

什么是 “需要的单元格”

[Quote=引用 6 楼 rightxiang 的回复:]

引用 4 楼 ioe_gaoyong 的回复:

你自己不说清楚 什么是你所谓的“所需的单元格”,别人怎么帮你

你解释一下吧


不是全部读取 只提取需要的单元格的内容
[/Quote]
rightxiang 2011-10-14
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 ioe_gaoyong 的回复:]

你自己不说清楚 什么是你所谓的“所需的单元格”,别人怎么帮你

你解释一下吧
[/Quote]

不是全部读取 只提取需要的单元格的内容
kai27ks 2011-10-14
  • 打赏
  • 举报
回复
http://www.jspcn.net/htmlnews/11453819137961448.html
风尘中国 2011-10-14
  • 打赏
  • 举报
回复
你自己不说清楚 什么是你所谓的“所需的单元格”,别人怎么帮你

你解释一下吧
rightxiang 2011-10-14
  • 打赏
  • 举报
回复
急啊 昨天找了一天
丶蒙圈丶 2011-10-14
  • 打赏
  • 举报
回复
帮顶,没接触过
rightxiang 2011-10-14
  • 打赏
  • 举报
回复
没人回复啊 !!!!
风尘中国 2011-10-14
  • 打赏
  • 举报
回复

这么多人没有一个明白的, 你需要读取的单元格是什么样的规则说了没?

值满足怎么样的条件,还是值类型满足什么条件? 你不说谁帮你解决问题

再问你一句,什么是你需要的单元格,听的懂中国话么?

[Quote=引用 13 楼 rightxiang 的回复:]

引用 11 楼 ioe_gaoyong 的回复:
什么是你需要的单元格,你好像听不懂中国话

引用 8 楼 rightxiang 的回复:

引用 7 楼 ioe_gaoyong 的回复:
什么是 “需要的单元格”

引用 6 楼 rightxiang 的回复:

引用 4 楼 ioe_gaoyong 的回复:

你自己不说清楚 什么是你所谓的“所需的单元格”,别人怎么帮……
[/Quote]

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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