java 奖xls转成csv_Java操作Excel文件以及将xls/xlsx转为csv文件_weixin_39970855的博客-程序员宅基地

技术标签: java 奖xls转成csv  

JAVA EXCEL API:是一开放源码项目,通过它Java开发人员可以读取Excel文件的内容、创建新的Excel文件、更新已经存在的Excel文件。

通过引入JXL.jar库后可以很方便地对xls或者xlsx文件进行读写操作,下面简要示例对xls文件的读取:

try {

String fileName = "yourPath/datas.xls";

File file = new File(fileName);

// 设置读文件编码

WorkbookSettings setEncode = new WorkbookSettings();

setEncode.setEncoding("GB2312");

// 从文件流中获取Excel工作区对象(WorkBook)

Workbook wb = Workbook.getWorkbook(file,setEncode);

// 从工作区中取得页(Sheet),默认单独一页,第一页

Sheet sheet = wb.getSheet(0);

// 测试:循环打印Excel表中的内容

for (int i = 0; i < 50; i++) {

for (int j = 0; j < sheet.getColumns(); j++) {

Cell cell = sheet.getCell(j, i);

System.out.print(cell.getContents());

}

System.out.println();

}

} catch (BiffException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

这样便可以挨个取出xls文件中每个单元格内的具体内容。

=====xls转 CSV=======

但是xls文件并不如csv的逗号文件应用方便和广泛,因此本文顺便示例如何将xls文件转化为csv文件。

其实只需要挨个将xls文件的单元格数据读取出来以后,加上英文逗号,追加到StringBuffer中即可,待完成所有数据的读取,最后将buffer写入到文件中。

但是有一个小小的陷阱需要注意:那就是在xls文件中,某个单元格内的内容有可能存在换行问题,因此需要置换每行的数据(除了每行的结束)以外所有换行符”\n”,不然生成的csv是无法使用的,简单示例代码如下:

import java.io.BufferedWriter;

import java.io.File;

import java.io.FileWriter;

import java.io.IOException;

import jxl.Cell;

import jxl.Sheet;

import jxl.Workbook;

import jxl.WorkbookSettings;

import jxl.read.biff.BiffException;

public class dealExcels {

public static void main(String[] args) {

String buffer = "";

try {

String fileName = "yourPath/datas.xls";

File file = new File(fileName);

// 设置读文件编码

WorkbookSettings setEncode = new WorkbookSettings();

setEncode.setEncoding("GB2312");

// 从文件流中获取Excel工作区对象(WorkBook)

Workbook wb = Workbook.getWorkbook(file,setEncode);

Sheet sheet = wb.getSheet(0);

for (int i = 0; i < sheet.getRows(); i++) {

for (int j = 0; j < 11; j++) {

Cell cell = sheet.getCell(j, i);

buffer += cell.getContents().replaceAll("\n", " ")+",";

}

buffer = buffer.substring(0, buffer.lastIndexOf(",")).toString();

buffer += "\n";

}

} catch (BiffException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

//write the string into the file

String savePath = "yourPath/datas.csv";

File saveCSV = new File(savePath);

try {

if(!saveCSV.exists())

saveCSV.createNewFile();

BufferedWriter writer = new BufferedWriter(new FileWriter(saveCSV));

writer.write(buffer);

writer.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

xls文件转csv文件就是将所有内容进行拼接,需要注意的就是 编码 问题 和 单个单元格内的 换行符。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_39970855/article/details/114713767

智能推荐

C++中添加自定义消息的响应_a31898534的博客-程序员宅基地

 1首先要在窗口类的cpp文件手动添加消息响应机制,    //{{AFX_MSG_MAP(CShellDlg)       ON_MESSAGE(WM_SENDOFFLINE, OnSendOffline) //自定义消息       ON_MESSAGE(WM_SWIPECARD, OnSwipeCard)     //自定义消息       ON_MESSAGE(WM_M

编写一个tf广播_追风筝的鱼的博客-程序员宅基地

tf broadcaster 1 #include 2 #include //专用头文件 3 #include 4 5 std::string turtle_name; 6 7 8 9 void poseCallback(const turtlesim::PoseConstPtr& msg){ 10 static tf

datatable js 按列筛选,使用多选选项的JQuery Datatable列过滤_INONNTANNC的博客-程序员宅基地

For my application, I am using JQuery datatable with materialize frame work. My table is having the following columns:1.Name 2.Position 3.Office 4.Age 5.Date and 6.SalaryIn that, I am dynamically crea...

unity3d中的CursorLockMode.Confined光标限制_zhaoedward的博客-程序员宅基地

按照unity3d手册中的Cursor.lockstate(https://docs.unity3d.com/ScriptReference/Cursor-lockState.html)中的代码测试光标的限制与锁定,发现在unity编辑器中光标并没有因为Cursor.lockState = CursorLockMode.Confined语句而被限制,发布成WebGL格式仍然不会被限制在游戏窗口中,...

esayui常用操作(数据库加载复选框选中,调用百度地图、三级联动封装,编辑器,js正则等等)_欧阳先僧的博客-程序员宅基地

常用图标库:图标一般选用16*16规格的iconfont.cn 阿里巴巴矢量图标库esayicon.net ico图标库

动态规划(2)_墨白纸黑的博客-程序员宅基地

动态规划一般只能应用于有最优子结构的问题。最优子结构的意思是局部最优解能决定全局最优解(对有些问题这个要求并不能完全满足,故有时需要引入一定的近似)。简单地说,问题能够分解成子问题来解决。动态规划解题步骤(问题抽象化、建立模型、寻找约束条件、判断是否满足最优性原理、找大问题与小问题的递推关系式、填表、寻找解组成,然后编写代码实现)动态规划算法分以下4个步骤:1.描述最优解的结构...

随便推点

android 相册选择库,GitHub - minyangcheng/ImageSelector: android图片选择库_轮胎技术Tyretek的博客-程序员宅基地

Android图片选择器当需要用户选择图片的时候,可以调用系统相机或相册。如果需要用户进行多图选择就需要自定义图片选择器。这里介绍我自己封装的图片选择器。实现思路对外开放api的功能:多图选择,单张图片选择,可以设置,用户可以在外部配置图片加载器Android M以上进行权限处理通过ContentResolver取到系统相册所有图片,并对其分类用recycleview图片展示,可以进行相册文件夹选...

python定向输出_如何在python中重定向函数的打印输出_weixin_39890633的博客-程序员宅基地

对于python3.4+,在标准库中有一个上下文管理器。with contextlib.redirect_stdout(file_like_object):...这部分答案已经更新,但主要是针对那些仍陷在python2.x世界中的人如果您一直在使用较旧版本的python,那么这个上下文管理器就不难自己编写了。关键是可以将sys.stdout更新为所需的任何类似文件的对象(这就是print写入的对象...

蓝桥杯比赛总结_weixin_33857230的博客-程序员宅基地

蓝桥杯比赛总结这次比赛刚开始心情比较紧张,只做了三道题,1,5,7.第一道题购物单,我先设计了一个2次的循环,并且笔算了一下结果,确定笔算结果与程序计算的结果一致了之后才按照题目要求设计了一个50次的循环。并且因为数据太多,验证了两次,确定结果一样,才提交结果,花了很多时间。第五题取数位,因为刚开始不确定一个数的第几位到底是从左往右数的第几位还...

java white case语句_java练习题,关于switch语句问题._粢范团的博客-程序员宅基地

importjava.util.*;classGenerator{intkey=0;publicStringnext(){switch(key){default:case0:key++;return"SnowWhite";case1:key++;return"Bashful";case2:key++;return"Doc";case3:k...import java.util.*;class Ge...

jumpserver 安装详解_Z14523299999的博客-程序员宅基地

一,下载软件  下载前安装依赖软件  yuminstall -yepel-release yum -y install git python-pip mysql-devel gcc automake autoconf python-devel vim sshpass lrzsz readline-devel  下载软件: ...

Spring干货集|Bean依赖你又觉得行了?_JavaEdge.的博客-程序员宅基地

点击上方“JavaEdge”,关注公众号设为“星标”,好文章不错过!实际的系统几乎不可能仅有单一的bean,都是很多个bean协作提供服务。本文目标也就是讨论如何冲破...

推荐文章

热门文章

相关标签