按照一个网帖教的方法。http://chenjumin.iteye.com/blog/731056这里面因为POI版本的升级(原帖为3.1;我用的3.7),类名有所变动,我大概找到的对应关系就是里面的Workbook类对应为新版的InternalWorkbook,Sheet类对应为InternalSheet。
但是写最后那个getByte方法的时候,死活想不到应该咋改了,求各位大神帮个忙吧。
找不到的方法我标注在程序里了,求各位大神看看。
static byte[] getBytes(Workbook workbook, Sheet[] sheets) {
int nSheets = sheets.length;
for(int i = 0; i < nSheets; i++){
sheets[i].preSerialize();
}
int totalsize = workbook.getSize();
int[] estimatedSheetSizes = new int[nSheets];
for(int k = 0; k < nSheets; k++){
workbook.setSheetBof(k, totalsize);
int sheetSize = sheets[k].getSize(); --这个getSize找不到了。。
estimatedSheetSizes[k] = sheetSize;
totalsize += sheetSize;
}
byte[] retval = new byte[totalsize];
int pos = workbook.serialize(0, retval);
for(int k = 0; k < nSheets; k++){
int serializedSize = sheets[k].serialize(pos, retval); --这个serialize找不到了。
if(serializedSize != estimatedSheetSizes[k]){
throw new IllegalStateException("Actual serialized sheet size (" + serializedSize
+ ") differs from pre-calculated size (" + estimatedSheetSizes[k] + ") for sheet (" + k
+ ")");
}
pos += serializedSize;
}
return retval;
}
但是写最后那个getByte方法的时候,死活想不到应该咋改了,求各位大神帮个忙吧。
找不到的方法我标注在程序里了,求各位大神看看。
static byte[] getBytes(Workbook workbook, Sheet[] sheets) {
int nSheets = sheets.length;
for(int i = 0; i < nSheets; i++){
sheets[i].preSerialize();
}
int totalsize = workbook.getSize();
int[] estimatedSheetSizes = new int[nSheets];
for(int k = 0; k < nSheets; k++){
workbook.setSheetBof(k, totalsize);
int sheetSize = sheets[k].getSize(); --这个getSize找不到了。。
estimatedSheetSizes[k] = sheetSize;
totalsize += sheetSize;
}
byte[] retval = new byte[totalsize];
int pos = workbook.serialize(0, retval);
for(int k = 0; k < nSheets; k++){
int serializedSize = sheets[k].serialize(pos, retval); --这个serialize找不到了。
if(serializedSize != estimatedSheetSizes[k]){
throw new IllegalStateException("Actual serialized sheet size (" + serializedSize
+ ") differs from pre-calculated size (" + estimatedSheetSizes[k] + ") for sheet (" + k
+ ")");
}
pos += serializedSize;
}
return retval;
}
解决方案 »
- 新建项目时找不到Axis2 waz的项
- JS生成的文本框如何用Struts从JSP上面去得值
- 求职:JAVA、JSP程序员
- 求助:关于validate的问题
- 关于调用EJB的低级问题
- struts中如何将按钮变成链接
- 关于struts中的标签<bean:message>的问题??????、、
- 如何在JBOSS3下部署STRUTS?
- 关于sun公司提供的J2EE1.4的安装和启动问题。。。。。。。。。。。。。。。
- MyBatis如何将数据从表读到网页,网页上输入的值又写入数据库?
- both the remote home and remote component interface must be specified
- at java.net.URLClassLoader$1.run(URLClassLoader.java:200)问题?
这个应该是写错了,获取数组的大小应该直接用 size()int serializedSize = sheets[k].serialize(pos, retval); --这个serialize找不到了。
这个不知道
等待,我大概找到的对应关系就是里面的Workbook类对应为新版的InternalWorkbook,Sheet类对应为InternalSheet。
这个对我很有帮助,先谢了~看看代码去!
private int _totalSize; public SheetRecordCollector() {
_totalSize = 0;
_list = new ArrayList(128);
}
public int getTotalSize() {
return _totalSize;
}
public void visitRecord(Record r) {
_list.add(r);
_totalSize+=r.getRecordSize();
}
public int serialize(int offset, byte[] data) {
int result = 0;
int nRecs = _list.size();
for(int i=0; i<nRecs; i++) {
Record rec = (Record)_list.get(i);
result += rec.serialize(offset + result, data);
}
return result;
}
}
再里面新建一个内部类就可以了,你看3.7的源码就是这么弄的