-
java 更新Excel内容 Excel公式未生效
2021-02-24 10:54:36问题:设置Excel的公式,根据java更新Excel中变量单元格,输出的Excel公式未生效 解决: //打开Excel重新计算公式 workBook.setForceFormulaRecalculation(true); 源码如下: /** * Whether the ...问题:设置Excel的公式,根据java更新Excel中变量单元格,输出的Excel公式未生效
解决:
//打开Excel重新计算公式 workBook.setForceFormulaRecalculation(true);
源码如下:
/** * Whether the application shall perform a full recalculation when the workbook is opened. * <p> * Typically you want to force formula recalculation when you modify cell formulas or values * of a workbook previously created by Excel. When set to true, this flag will tell Excel * that it needs to recalculate all formulas in the workbook the next time the file is opened. * </p> * <p> * Note, that recalculation updates cached formula results and, thus, modifies the workbook. * Depending on the version, Excel may prompt you with "Do you want to save the changes in <em>filename</em>?" * on close. * </p> * * @param value true if the application will perform a full recalculation of * workbook values when the workbook is opened * @since 3.8 */ public void setForceFormulaRecalculation(boolean value){ CTWorkbook ctWorkbook = getCTWorkbook(); CTCalcPr calcPr = ctWorkbook.isSetCalcPr() ? ctWorkbook.getCalcPr() : ctWorkbook.addNewCalcPr(); // when set to 0, will tell Excel that it needs to recalculate all formulas // in the workbook the next time the file is opened. calcPr.setCalcId(0); if(value && calcPr.getCalcMode() == STCalcMode.MANUAL) { calcPr.setCalcMode(STCalcMode.AUTO); } }
-
【java 菜鸟实践<一>】实现PIO excel更新某个单元格数据(支持excel2003和2007)
2017-12-18 14:17:45背景:在实现自动化测试时,执行完每一条excel测试用例后,需要更新该条用例的测试结果单元格中执行结果,于是在网上苦找方法,都是零碎案例,无法达到预期目的,又由于java功底一般,故自己琢磨写了一个简单的方法...背景:在实现自动化测试时,执行完每一条excel测试用例后,需要更新该条用例的测试结果单元格中执行结果,于是在网上苦找方法,都是零碎案例,无法达到预期目的,又由于java功底一般,故自己琢磨写了一个简单的方法解决问题,相信网上大神众多,肯定有更好方式和方法,欢迎大神来拍砖指导。。package common;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFCell;import java.io.*;
/**
* User: XZee
* Date: 2011-10-10
* Time: 16:10:29
*/public class write_excel {
/** 总行数 */
private int totalRows = 0;
/** 总列数 */
private int totalCells = 0;
/** 错误信息 */
private static String errorInfo;
private static XSSFWorkbook workbook;
private static HSSFWorkbook workbook2;
/** 构造方法
* @return */public int getTotalRows() {
return totalRows;
}
public int getTotalCells() {
return totalCells;
}
public String getErrorInfo() {
return errorInfo;
}
public static boolean validateExcel(String filePath) {
/** 检查文件名是否为空或者是否是Excel格式的文件 */
if (filePath == null|| !(isExcel2003(filePath) || isExcel2007(filePath))) {
errorInfo = "文件名不是excel格式";
return false;
}
/** 检查文件是否存在 */
File file = new File(filePath);
if (file == null || !file.exists()) {
errorInfo = "文件不存在";
return false;
}
return true;
}
public static boolean isExcel2003(String filePath) {
return filePath.matches("^.+\\.(?i)(xls)$");
}public static boolean isExcel2007(String filePath) {
return filePath.matches("^.+\\.(?i)(xlsx)$");
}/**
* 只是一个demo,这里假设修改的值是String类型
* @param filePath
* @param sheetIndex
* @param col
* @param row
* @param value
* @throws Exception
*/
public static void updateExcel(String filePath,int sheetIndex,int row,int col,String value)throws Exception{
/** 验证文件是否合法 */
if (!validateExcel(filePath)) {
System.out.println(errorInfo);
}
FileInputStream fis=new FileInputStream(filePath);
/** 判断文件的类型,是2003还是2007 */
if (isExcel2007(filePath)) {workbook = new XSSFWorkbook(fis);
XSSFSheet sheet=workbook.getSheetAt(0);
XSSFRow r=sheet.getRow(row);
XSSFCell cell=r.getCell(col);
String str=cell.getStringCellValue();
//这里假设对应单元格原来的类型也是String类型
cell.setCellValue(value);
System.out.println("单元格原来值为"+str+"\n");
System.out.println("单元格值被更新为"+value+"\n");fis.close();//关闭文件输入流
FileOutputStream fos=new FileOutputStream(filePath);
workbook.write(fos);
fos.close();//关闭文件输出流
}else if(isExcel2003(filePath)){
workbook2 = new HSSFWorkbook(fis);
HSSFSheet sheet = workbook2.getSheetAt(sheetIndex);
HSSFRow r = sheet.getRow(row);
HSSFCell cell = r.getCell(col);
String str=cell.getStringCellValue();
//这里假设对应单元格原来的类型也是String类型
cell.setCellValue(value);
System.out.println("单元格原来值为"+str);
System.out.println("单元格值被更新为"+value);fis.close();//关闭文件输入流
FileOutputStream fos=new FileOutputStream(filePath);
workbook2.write(fos);
fos.close();//关闭文件输出流
}else{
System.out.println("当前文件,可能不是excel203或excel2007文件,请检查文件");
}}
public static void main(String[] args) throws Exception{
// TODO Auto-generated method stub
File file=new File("E:\\workspace\\FE_performance_test\\Datasource\\TestCase.xlsx");
String file="E:\\workspace\\FE_performance_test\\Datasource\\TestCase.xlsx";//下面尝试更改第一行第一列的单元格的值
write_excel.updateExcel(file,0,6,1,"2哥好腻害");
}原文地址:http://blog.csdn.net/zouxiongqqq/article/details/78478298
-
【java 菜鸟自动化实践之一】实现POI excel更新某个单元格数据(支持excel2003和2007)
2017-11-08 14:21:35背景:在实现自动化测试时,执行完每一条excel测试用例后,需要更新该条用例的测试结果单元格中执行结果,于是在网上苦找方法,都是零碎案例,无法达到预期目的,又由于java功底一般,故自己琢磨写了一个简单的方法...背景:在实现自动化测试时,执行完每一条excel测试用例后,需要更新该条用例的测试结果单元格中执行结果,于是在网上苦找方法,都是零碎案例,无法达到预期目的,又由于java功底一般,故自己琢磨写了一个简单的方法解决问题,相信网上大神众多,肯定有更好方式和方法,欢迎大神来拍砖指导。。
package common;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFCell;import java.io.*;
/**
* User: XZee
* Date: 2011-10-10
* Time: 16:10:29
*/public class write_excel {
/** 总行数 */
private int totalRows = 0;
/** 总列数 */
private int totalCells = 0;
/** 错误信息 */
private static String errorInfo;
private static XSSFWorkbook workbook;
private static HSSFWorkbook workbook2;
/** 构造方法
* @return */public int getTotalRows() {
return totalRows;
}
public int getTotalCells() {
return totalCells;
}
public String getErrorInfo() {
return errorInfo;
}
public static boolean validateExcel(String filePath) {
/** 检查文件名是否为空或者是否是Excel格式的文件 */
if (filePath == null|| !(isExcel2003(filePath) || isExcel2007(filePath))) {
errorInfo = "文件名不是excel格式";
return false;
}
/** 检查文件是否存在 */
File file = new File(filePath);
if (file == null || !file.exists()) {
errorInfo = "文件不存在";
return false;
}
return true;
}
public static boolean isExcel2003(String filePath) {
return filePath.matches("^.+\\.(?i)(xls)$");
}public static boolean isExcel2007(String filePath) {
return filePath.matches("^.+\\.(?i)(xlsx)$");
}/**
* 只是一个demo,这里假设修改的值是String类型
* @param filePath
* @param sheetIndex
* @param col
* @param row
* @param value
* @throws Exception
*/
public static void updateExcel(String filePath,int sheetIndex,int row,int col,String value)throws Exception{
/** 验证文件是否合法 */
if (!validateExcel(filePath)) {
System.out.println(errorInfo);
}
FileInputStream fis=new FileInputStream(filePath);
/** 判断文件的类型,是2003还是2007 */
if (isExcel2007(filePath)) {workbook = new XSSFWorkbook(fis);
XSSFSheet sheet=workbook.getSheetAt(sheetIndex);
XSSFRow r=sheet.getRow(row);
XSSFCell cell=r.getCell(col);
String str=cell.getStringCellValue();
//这里假设对应单元格原来的类型也是String类型
cell.setCellValue(value);
System.out.println("单元格原来值为"+str+"\n");
System.out.println("单元格值被更新为"+value+"\n");fis.close();//关闭文件输入流
FileOutputStream fos=new FileOutputStream(filePath);
workbook.write(fos);
fos.close();//关闭文件输出流
}else if(isExcel2003(filePath)){
workbook2 = new HSSFWorkbook(fis);
HSSFSheet sheet = workbook2.getSheetAt(sheetIndex);
HSSFRow r = sheet.getRow(row);
HSSFCell cell = r.getCell(col);
String str=cell.getStringCellValue();
//这里假设对应单元格原来的类型也是String类型
cell.setCellValue(value);
System.out.println("单元格原来值为"+str);
System.out.println("单元格值被更新为"+value);fis.close();//关闭文件输入流
FileOutputStream fos=new FileOutputStream(filePath);
workbook2.write(fos);
fos.close();//关闭文件输出流
}else{
System.out.println("当前文件,可能不是excel203或excel2007文件,请检查文件");
}}
public static void main(String[] args) throws Exception{
// TODO Auto-generated method stub
File file=new File("E:\\workspace\\FE_performance_test\\Datasource\\TestCase.xlsx");
String file="E:\\workspace\\FE_performance_test\\Datasource\\TestCase.xlsx";//下面尝试更改第一行第一列的单元格的值
write_excel.updateExcel(file,0,6,1,"2哥好腻害");
}
-
jxl操作excel(合并单元格,设置背景色,字体颜色)
2013-07-22 16:39:45现在正在做的项目中涉及大量的Excel文件导出导入操作,都是使用Java Excel来操作。 Java Excel是一开放源码项目,通过它Java开发人员可以读取Excel文件的内容、创建新的Excel文件、更新已经存在的Excel文件。下面...现在正在做的项目中涉及大量的Excel文件导出导入操作,都是使用Java Excel来操作。
Java Excel是一开放源码项目,通过它Java开发人员可以读取Excel文件的内容、创建新的Excel文件、更新已经存在的Excel文件。下面我写了一个简单的例子,展示基本的读取,新建,更新(包括常见格式的设置:字体,颜色,背景,合并单元格),拷贝操作,有这些其实已经基本足够应付大部分问题了。下面是例的源代码:import java.io.*; import java.util.Date; import jxl.*; import jxl.format.Colour; import jxl.format.UnderlineStyle; import jxl.read.biff.BiffException; import jxl.write.*; import jxl.format.UnderlineStyle; import jxl.format.CellFormat;; public class OperateExcel { /** * Read data from a excel file */ public static void readExcel(String excelFileName){ Workbook rwb = null; try{ InputStream stream = new FileInputStream(excelFileName); rwb = Workbook.getWorkbook(stream); Sheet sheet = rwb.getSheet(0); Cell cell = null; int columns = sheet.getColumns(); int rows = sheet.getRows(); for( int i=0 ; i< rows ; i++ ) for( int j=0 ; j< columns ; j++){ //attention: The first parameter is column,the second parameter is row. cell = sheet.getCell(j,i); String str00 = cell.getContents(); if( cell.getType() == CellType.LABEL ) str00 += " LAEBL"; else if( cell.getType() == CellType.NUMBER) str00 += " number"; else if( cell.getType() == CellType.DATE) str00 += " date"; System.out.println("00==>"+str00); } stream.close(); } catch(IOException e){ e.printStackTrace(); } catch(BiffException e){ e.printStackTrace(); } finally{ rwb.close(); } } /** * create a new excelFile * @param excelFileName create name */ public static void createExcelFile(String excelFileName){ try{ WritableWorkbook wwb = Workbook.createWorkbook(new File(excelFileName)); WritableSheet ws = wwb.createSheet("sheet1",0); //also,The first parameter is column,the second parameter is row. // add normal label data Label label00 = new Label(0,0,"Label00"); ws.addCell(label00); //add font formating data WritableFont wf = new WritableFont(WritableFont.TIMES, 18, WritableFont.BOLD , true); WritableCellFormat wff = new WritableCellFormat(wf); Label label10 = new Label(1,0,"Label10",wff); ws.addCell(label10); //add color font formating data WritableFont wf_color = new WritableFont(WritableFont.ARIAL,10,WritableFont.NO_BOLD,false,UnderlineStyle.DOUBLE_ACCOUNTING,Colour.RED); WritableCellFormat wff_color = new WritableCellFormat(wf_color); wff_color.setBackground(Colour.GRAY_25); //set background coloe to gray Label label20 = new Label(2,0,"Label20",wff_color); ws.addCell(label20); //合并单元格 WritableFont wf_merge = new WritableFont(WritableFont.ARIAL,10,WritableFont.NO_BOLD,false,UnderlineStyle.DOUBLE_ACCOUNTING,Colour.GREEN); WritableCellFormat wff_merge = new WritableCellFormat(wf_merge); wff_merge.setBackground(Colour.BLACK); Label label30 = new Label(3,0,"Label30",wff_merge); ws.addCell(label30); Label label40 = new Label(4,0,"Label40"); ws.addCell(label40); Label label50 = new Label(5,0,"Label50"); ws.addCell(label50); //合并 (0,3) (4,0) //attention : 如果合并后面的列不为空,那么就把后面格的内容清空,格式也是按前一个单元格的格式 ws.mergeCells(3,0,4,0); //添加Number格式数据 jxl.write.Number labelN = new jxl.write.Number(0, 1, 3.1415926); ws.addCell(labelN); //添加带有formatting的Number对象 jxl.write.NumberFormat nf = new jxl.write.NumberFormat("#.##"); jxl.write.WritableCellFormat wcfN = new jxl.write.WritableCellFormat(nf); jxl.write.Number labelNF = new jxl.write.Number(1, 1, 3.1415926, wcfN); ws.addCell(labelNF); //添加Boolean对象 jxl.write.Boolean labelBoolean = new jxl.write.Boolean(2,1,false); ws.addCell(labelBoolean); //添加DateTime对象 DateTime labelDT = new DateTime(3,1,new Date()); ws.addCell(labelDT); //添加带有格式的DataTime数据 DateFormat dtf = new DateFormat("yyyy-MM-dd hh:mm:ss"); WritableCellFormat wcfDt = new WritableCellFormat(dtf); wcfDt.setBackground(Colour.YELLOW); DateTime labelDT_format = new DateTime(4,1,new java.util.Date(),wcfDt); ws.addCell(labelDT_format); ws.mergeCells(4,1,5,1); //比较长,用两列来显示 wwb.write(); wwb.close(); } catch(IOException e){ e.printStackTrace(); } catch(WriteException e){ e.printStackTrace(); } } /** * 如何更新Excel文件 * @param fileName */ public static void updateExcel(String fileName){ try{ jxl.Workbook rw = jxl.Workbook.getWorkbook(new File(fileName)); WritableWorkbook wwb = Workbook.createWorkbook(new File(fileName),rw); //这里其实执行的是一次copy操作,把文件先读到内存中,修改后再保存覆盖原来的文件来实现update操作 WritableSheet ws = wwb.getSheet(0); WritableCell wc = ws.getWritableCell(0,0); if( wc.getType() == CellType.LABEL){ Label l = (Label)wc; l.setString(wc.getContents()+"_new"); } wwb.write(); wwb.close(); } catch(IOException e){ e.printStackTrace(); } catch(WriteException e){ e.printStackTrace(); } catch(BiffException e){ e.printStackTrace(); } } /** * 如何copy Excel文件 * @param fileName */ public static void copyExcel(String sourFileName,String destFileName){ try{ jxl.Workbook rw = jxl.Workbook.getWorkbook(new File(sourFileName)); WritableWorkbook wwb = Workbook.createWorkbook(new File(destFileName),rw); wwb.write(); wwb.close(); } catch(IOException e){ e.printStackTrace(); } catch(WriteException e){ e.printStackTrace(); } catch(BiffException e){ e.printStackTrace(); } } public static void main(String [] argv){ //OperateExcel.readExcel("E:\\test.xls"); //OperateExcel.createExcelFile("E:\\test1.xls"); //OperateExcel.updateExcel("E:\\test.xls"); OperateExcel.copyExcel("E:\\test.xls","E:\\moon.xls"); } }
-
jxl操作excel(合并单元格,设置背景色,字体颜色)
2012-09-12 22:10:36现在正在做的项目中涉及大量的Excel文件导出导入操作,都是使用Java Excel来操作。 Java Excel是一开放源码项目,通过它Java开发人员可以读取Excel文件的内容、创建新的Excel文件、更新已经存在的Excel文件。下面... -
java使用poi在word中生成柱状图、折线图、饼图、柱状图+折线图组合图、动态表格、文本替换、图片替换、更新...
2019-09-12 14:33:13代码直接从日记中复制过来的,不方便复制的可以私信发示例代码,不知道怎么上传附件了。 代码有的地方写的不合理或者错误的,请原谅没有检查仔细; 说明:在poi3.x的版本中,没有对图表的支持,至少目前为止没... -
jxl 操作Excel 中 单元格合并,颜色设定等方法
2009-07-09 14:02:00转自:http://tmsoft.lsxy.com/index.php?id=605&load=read现在正在做的项目中涉及大量的Excel文件导出导入操作,都是使用Java Excel来操作。 Java Excel是一开放源码项目,通过它Java开发人员可以读取Excel文件的... -
java to excel
2009-10-26 15:49:45Java Excel 使用攻略现在正在做的项目中涉及大量的Excel文件导出导入操作,都是使用Java Excel来操作。 Java Excel是一开放源码项目,通过它Java开发人员可以读取Excel文件的内容、创建新的Excel文件、更新已经存在... -
Java Excel 使用攻略
2006-04-10 13:00:00现在正在做的项目中涉及大量的Excel文件导出导入操作,都是使用Java Excel来操作。Java Excel是一开放源码项目,通过它Java开发人员可以读取Excel文件的内容、创建新的Excel文件、更新已经存在的Excel文件。下面我写... -
jxl 中 单元格合并,颜色设定等方法
2012-01-05 20:53:15Java Excel是一开放源码项目,通过它Java开发人员可以读取Excel文件的内容、创建新的Excel文件、更新已经存在的Excel文件。下面我写了一个简单的例子,展示基本的读取,新建,更新(包括常见格式的设置:字体,颜色,... -
jxl 中 单元格合并,颜色设定等方法
2011-01-11 12:02:35Java Excel是一开放源码项目,通过它Java开发人员可以读取Excel文件的内容、创建新的Excel文件、更新已经存在的Excel文件。下面我写了一个简单的例子,展示基本的读取,新建,更新(包括常见格式的设置:字体,颜色,... -
Java操作百万数据量Excel导入导出工具类(维护中)
2018-06-28 15:12:17更新日志:(如果有更好的优化方案或者更高级的工具类:欢迎评论或者私信) * 1.response.reset();注释掉reset,否在会出现跨域错误。 * 2.可导出多个单元、poi官方建议大数据量解决方案:SXSSFWorkbook。 * 3.... -
Java 读取及生成Excel文件
2019-04-24 22:50:34在java项目中,会遇到读取或生成Excel文件的时候,我们来看两个可以实现这一功能的工具包:jxl和poi。 两种方式对比: 1. JXL只能对Excel进行操作,属于比较老的框架,它只支持到Excel 95-2000的版本。现在已经停止... -
《Java开发实战1200例(第I卷)》(李钟尉.陈丹丹).part2 高清完整PDF版
2016-06-13 15:53:27实例280 禁用MDI窗体控制栏中的“最大化”按钮 第12章 窗体特效 12.1 让窗体更有活力 实例281 右下角弹出信息窗体 实例282 淡入淡出的窗体 实例283 窗体顶层的进度条 实例284 设置窗体的鼠标光标 实例285 ... -
《Java开发实战1200例(第I卷)》(李钟尉.陈丹丹).part3 高清完整PDF版
2016-06-13 16:11:24实例280 禁用MDI窗体控制栏中的“最大化”按钮 第12章 窗体特效 12.1 让窗体更有活力 实例281 右下角弹出信息窗体 实例282 淡入淡出的窗体 实例283 窗体顶层的进度条 实例284 设置窗体的鼠标光标 实例285 ... -
Java开发实战1200例(第1卷).(清华出版.李钟尉.陈丹丹).part3
2016-06-12 11:39:31实例043 将二维数组中的行列互换 53 实例044 利用数组随机抽取幸运观众 54 实例045 用数组设置JTable表格的列名与列宽 55 3.2 数组操作 57 实例046 数组的下标界限 57 实例047 按钮控件数组实现计数器界面 58 实例... -
Java开发实战1200例(第1卷).(清华出版.李钟尉.陈丹丹).part1
2016-06-12 11:34:39实例043 将二维数组中的行列互换 53 实例044 利用数组随机抽取幸运观众 54 实例045 用数组设置JTable表格的列名与列宽 55 3.2 数组操作 57 实例046 数组的下标界限 57 实例047 按钮控件数组实现计数器界面 58 实例... -
jxl
2010-06-09 21:58:00现在正在做的项目中涉及大量的Excel文件导出导入操作,都是使用Java Excel来操作。 Java Excel是一开放源码项目,通过它Java开发人员可以读取Excel文件的内容、创建新的Excel文件、更新已经存在的Excel文件。下面我... -
paramquery-7.1.0.zip
2020-08-01 08:57:14Java / MySQL中的服务器端示例 基本特点: 本地和远程分页,排序和过滤 完全定制的多个行和单元格选择 隐藏或显示列 可调整大小的列和网格 列分组 行摘要 CRUD(创建,读取,更新,删除) 国际化和本地化 显示本地... -
ExtJS(ajax框架) 4.2.1
2018-12-19 23:57:11可以把ExtJS用在.Net、Java、Php等各种开发语言开发的应用中。ExtJs最开始基于YUI技术,由开发人员 JackSlocum开发,通过参考JavaSwing等机制来组织可视化组件,无论从UI界面上CSS样式的应用,到数据解析上的异常... -
asp.net知识库
2015-06-18 08:45:45ASP.NET 中的正则表达式 常用的匹配正则表达式和实例 经典正则表达式 delegate vs. event 我是谁?[C#] 表达式计算引擎 正式发布表达式计算引擎WfcExp V0.9(附源码) 运算表达式类的原理及其实现 #实现的18位身份证... -
易语言程序免安装版下载
2011-04-07 09:28:50修改高级表格支持库,允许“复制选定文本()”“剪切选定文本()”在“允许选择块”属性为假时复制剪切当前单元格中的文本。 18. 修改扩展界面支持库三,为“高级选择夹”增加“不点燃选中子夹”属性。 19. 修改XML... -
myeclipse加载报表配置xml文件失败,项目无法正常运行,怎么解决?
2019-04-11 19:49:00wabacus_system.css文件中的.cls-data-th-list、.cls-data-td-list的样式定义实现。 ]]> <![CDATA[ <font color='#FF0000'> 请将鼠标放在数据标题列各单元格之间进行左右移动,调整列宽 ]]> ... -
ext editorGrid 问题
2009-12-03 20:45:31// dataIndex 将特定的列映射到数据源(Data Store)中的数据列(在后面创建) var cm = new Ext.grid.ColumnModel([ { id : 'id', header : "编号", dataIndex : 'id', width : 50 }, ...