2022-11-22 10:30来源:m.sf1369.com作者:宇宇
因为经常要用到导出功能,之前因为文件名乱码,所以都用英文或是拼音缩写来代替,今天特意要接觉下这个问题。顺便记录下。望对小白有用。
/**
* 导出结算详情列表
* @return
*/
public void depositLogExport()
{
String title = "押金流水报表";
String excelName = "押金流水报表.xls";
OutputStream os = null;
try
{
int shopId=new Long(getShopLoginer().getShop().getId()).intValue();
if(date==null){
date=new DateBean();
}
int count=service.getCount(shopId, date);
Page<DepositLog> pageResult =new Page<DepositLog>();
if(count>0){
pageResult = service.list(1, count, shopId, date);
}
List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
double shopDeposit=getShopLoginer().getShop().getDeposit();
for (DepositLog s : pageResult.getData())
{
Map<String, Object> map = new HashMap<String, Object>();
map.put("id", s.getId());
map.put("depositSn", s.getDepositSn());
map.put("createTime", StringUtils.timestampToString(s.getCreateTime()));
map.put("type", type[s.getType()]);
map.put("amount", s.getAmount());
map.put("depositRest", s.getDepositRest());
map.put("depositGap", shopDeposit-s.getDepositRest());
map.put("userName", s.getUserName());
map.put("remarks", s.getRemarks());
list.add(map);
}
// 表格表头
String[] header = {"流水号","流水时间","类型","流水金额","押金余额","押金缺口","操作人","备注"};
// 对应Map中的key
String[] key = { "depositSn", "createTime","type",
"amount", "depositRest", "depositGap", "userName", "remarks"};
HSSFWorkbook workbook = null;
HttpServletResponse response = ServletActionContext
.getResponse();
workbook = ExportUtil.workPaperExport(list, header, key,
title, true, null, null, null);
os = response.getOutputStream();
response.setHeader("Content-disposition",
"attachment; filename=" + toUtf8String(excelName));
response.setContentType("application/msexcel;charset=UTF-8");
workbook.write(os);
os.flush();
} catch (Exception e) {
if (logger.isDebugEnabled())
logger.error(e.getMessage(), e);
e.printStackTrace();
} finally {
try {
if (os != null)
os.close();
} catch (IOException e) {
if (logger.isInfoEnabled())
logger.error(e.getMessage(), e);
e.printStackTrace();
}
}
//return null;
}
//文件名乱码处理
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("utf-8");}
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();
}
在Excel中,将数字单元格的格式更改为数值,即可解决乱码的问题,具体的操作步骤如下:
右键单击单元格
在Excel中,找到乱码的单元格,鼠标右键单击它,展开下拉菜单。
点击设置单元格格式
在下拉菜单中,找到设置单元格格式,点击它进入新界面。
点击确定
在新界面中,将数字的格式选为数值,点击确定即可解决乱码的问题。
在简体中文环境下,EXCEL打开的CSV文件默认是ANSI编码,如果CSV文件的编码方式为utf-8、Unicode等编码可能就会出现文件乱码的情况。
1、使用记事本打开CSV文件
2、另存为ANSI编码文件
点击菜单:文件-另存为,编码方式选择ANSI
3、打开文件
再用EXCEL打开这个文件就不会出现乱码的情况。
三、解决思路二
也可以直接在excel中点击数据,然后点击从文本/CSV,然后选中需要转换的文件,点击打开
然后,选择Unicode(UFT-8)编码方式,最后再点击加载
1、将表格打开,里面出现了一堆我们看不懂的乱码。
2、将表格关闭,回到文件所在的文件夹,光标放在上面右击,点击打开方式。
3、仔细观察界面,点击选择其他应用。
4、系统跳转下拉菜单,找到记事本图标,点击它,点击下方确定图标。
5、记事本打开表格以后,鼠标点击左上方的文件图标,在拉菜单中选择另存为。
6、在另存为属性框内,确认保存的路径以及文件名称,最重要的一点来了,我们在编码处选择ANSI格式,右侧点击保存。
7、完成以后,用Excel打开这一个文件,这时,数据就会变得正常了。
将表格打开,里面出现了一堆我们看不懂的乱码。
将表格关闭,回到文件所在的文件夹,光标放在上面右击,点击打开方式。
仔细观察界面,点击选择其他应用。
系统跳转下拉菜单,找到记事本图标,点击它,点击下方确定图标。
记事本打开表格以后,鼠标点击左上方的文件图标,在拉菜单中选择另存为。
在另存为属性框内,确认保存的路径以及文件名称,最重要的一点来了,我们在编码处选择ANSI格式,右侧点击保存。
完成以后,用Excel打开这一个文件,这时,数据就会变得正常了。
1、转换格式法
这种方法就是将受损的Excel工作簿重新保存,并将保存格式选为SYLK格式;一般情况下,大家要是可以打开受损Excel文件,只是不能对文件进行各种编辑和打印操作的话,那么笔者建议大家首先尝试这种方法,来将受损的Excel工作簿转换为SYLK格式来保存,通过这种方法可筛选出文档中的损坏部分。
1、首先在单元格中输入身份证号,这时单元格中并没有显示身份证号,而是将身份证号识别为一个数字,并显示为科学计数法。
2、在单元格上点击鼠标右键,然后从右键菜单中选择“设置单元格式”。
3、在打开的设置单元格格式窗口中,点击“数字”选项卡,然后在数字选项卡中从分类列表里选中“文本”,然后点击“确定”。
4、这时再回到Excel编辑界面,刚才显示为科学计数法的身份证号已经显示为完整的身份证号了。
Excel2016单元格输入身份证号乱码解决方法二:
1、这种方法比较简单,在输入身份证号之前先在单元格中输入一个英文格式的单引号。
2、接下来在单引号之后输入身份证号。
3、输入完成后你就会发现单元格中直接显示的就是身份证号,而不会显示科学计数法。
注意事项
单元格格式为文本时,显示就会与输入内容一致。
1、Excel打开一个csv格式的文档,出现乱码;
2、有乱码的 CSV 档透过记事本的方式开启;
3、用记事本打开后,开到的也是一堆乱码,单击“档案”---“另存为”;
4、在弹出的保存对话框中选择“ANSI"格式;
5、设置完成,将文件保存再用excel 打开。可以看到,文档能够正常的显示了;
方法一:手动处理
1、打开Word,单击【文件】菜单中的【打开】命令。
2、在文件类型中选择【所有文件】,找到并选中要修复的.xls文件,单击【打开】按钮。
3、打开后,如果Excel只有一个工作表,会自动以表格的形式装入Word,若文件是由多个工作表组成,每次只能打开一个工作表。
4、将文件中损坏的部分数据删除。
5、用鼠标选中表格,在“表格”菜单中选“表格转文字”,可选用“,”分隔符或其他分隔符。
6、另保存为一个文本文件.txt。
7、在Excel中直接打开该文本文件,另存为其他名字的Excel文件即可。
方法二:excel乱码修复工具
可以使用Concept Data公司推出的excel乱码修复工具——ExcelRecovery
1、首先运行ExcelRecovery工具
2、在文件菜单下可选择Recovery选项
3、打开Excel,单击“文件”菜单的“Recover”选项
4、进入Excel Recovery
5、指定要修复的Excel文件,然后按[Recover]按钮。
6、等待自动修复
7、修复完成后,文件自动打开
8、另存为一个新的文件名即可
Excel出现乱码的解决办法:
1:Excel 打开一个csv格式的文档,出现乱码
2:有乱码的 CSV 档透过记事本的方式开启
3:用记事本打开后,开到的也是一堆乱码,单击“档案”---“另存为”
4:在弹出的保存对话框中选择“ANSI"格式
5:设置完成,将文件保存再用excel 打开。可以看到,文档能够正常的显示了