我有一个现有的excel电子表格,我正在访问并从中读取值,我正在使用Apache POI HSSF.
它初始化如下:
HSSFSheet sheet;
FileInputStream fis = new FileInputStream(this.file);
POIFSFileSystem fs = new POIFSFileSystem(fis);
HSSFWorkbook wb = new HSSFWorkbook(fs);
this.sheet = wb.getSheet(exsheet);
Run Code Online (Sandbox Code Playgroud)
我正在遍历工作表中存在的所有单元格,这将生成一个单元格对象:
HSSFCell cell = (HSSFCell) cells.next();
Run Code Online (Sandbox Code Playgroud)
请熟悉该框架的人解释如何创建一个(HSSFColor)对象来表示工作表中每个单元格的背景颜色.
非常感谢
编辑,更新
要清楚我想知道的是:如何为现有单元格的背景颜色创建/获取HSSFColor对象?
cell.getCellStyle().getFillBackgroundColor();
Run Code Online (Sandbox Code Playgroud)
此代码仅返回一个短数字,而不是HSSFColor对象.谢谢你到目前为止的答案.
我正在寻找一个包含字符串'Total'的电子表格中的单元格,然后使用该单元格中的行来查找另一个单元格中的总值,该单元格始终是相同的单元格/列(0中的第10个单元格)基于索引).
我有以下代码,没有错误(语法),但findCell方法没有返回rowNum值:
public static void main(String[] args) throws IOException{
String fileName = "C:\\file-path\\report.xls";
String cellContent = "Total";
int rownr=0, colnr = 10;
InputStream input = new FileInputStream(fileName);
HSSFWorkbook wb = new HSSFWorkbook(input);
HSSFSheet sheet = wb.getSheetAt(0);
rownr = findRow(sheet, cellContent);
output(sheet, rownr, colnr);
finish();
}
private static void output(HSSFSheet sheet, int rownr, int colnr) {
/*
* This method displays the total value of the month
*/
HSSFRow row = sheet.getRow(rownr);
HSSFCell cell = row.getCell(colnr);
System.out.println("Your total is: " + …
Run Code Online (Sandbox Code Playgroud) 当我正在阅读Excel文件(.xls格式)时,我不断得到一个异常:
java.lang.IllegalArgumentException: Your Input Stream was neither an OLE 2 stream, nor an OOXML stream.
Run Code Online (Sandbox Code Playgroud)
我Go-ogled并发现如果输入流不支持重置或标记,我应该用它包装pushbackStream
.我的输入流未支持mark\reset.
所以使用pushbackStream
是唯一的选择吗?如何使用它?什么是使用它?
谢谢
我需要在我的项目中将csv转换为xls/xlsx?我怎样才能做到这一点?有人可以给我发一些例子吗?我想用Apache poi做这件事.我还需要从java端创建一个单元格.
目前我的代码为
bean.setREPO_DATE(row.getCell(16).getDateCellValue());
Run Code Online (Sandbox Code Playgroud)
如果单元格在excel中格式化为日期,它可以正常工作.
但是它也会转换一些整数或长整数,如1234或5699.我也知道这背后的原因.
但是我想在执行上面的行之前应用检查.像这样的东西
if(row.getCell(16).isOfDateFormat){
bean.setREPO_DATE(row.getCell(16).getDateCellValue());
}
Run Code Online (Sandbox Code Playgroud)
请指导我..
提前致谢 !
我发现以下代码从现有模板创建excel表格,并使用格式并向其添加数据并将其保存到新文件
POIFSFileSystem fs = new POIFSFileSystem(
new FileInputStream("template.xls"));
HSSFWorkbook wb = new HSSFWorkbook(fs, true);
Will load an xls, preserving its structure (macros included). You can then modify it,
HSSFSheet sheet1 = wb.getSheet("Data"); ...
Run Code Online (Sandbox Code Playgroud)
然后保存它.
FileOutputStream fileOut = new FileOutputStream("new.xls");
wb.write(fileOut);
fileOut.close();
Run Code Online (Sandbox Code Playgroud)
这绝对没问题.但我的问题是我现在正在处理新版本的excel.所以我需要开发一个类似的代码来处理新版本的模板.有人可以建议我怎么做?我尝试将HSSWorkbook更改为XSSFWorkbook.但是XSSFWorkbook没有允许我传递布尔值的构造函数.也.当我尝试它时,它会复制数据,但带有数据的行不会保留模板所具有的列的格式.
在从数据库中获取记录之后,我已经在一些列表中添加了数据,并且我已经为它们设置了一些会话变量,以便我可以使用会话的get(key)方法访问另一个方法,这是我成功完成的.现在我是什么想要是我想通过在行中设置此列表值来创建动态记录但我无法这样做.它创建文件但没有显示记录.Below是我的代码:
package com.ca.actions;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.struts2.dispatcher.SessionMap;
import org.apache.struts2.interceptor.SessionAware;
import com.ca.database.Database;
import com.ca.pojo.Event;
import com.itextpdf.text.Document;
import com.itextpdf.text.Element;
import com.itextpdf.text.PageSize;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.Phrase;
import com.itextpdf.text.pdf.PdfPCell;
import com.itextpdf.text.pdf.PdfPTable;
import com.itextpdf.text.pdf.PdfWriter;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.Preparable;
public class DataForGeneralReportsAction extends ActionSupport implements
Preparable, SessionAware {
private List<String> eventsGeneral = new ArrayList<String>();
private List<String> companiesGeneral = new ArrayList<String>();
private SessionMap<String, Object> sessionMapGeneral; …
Run Code Online (Sandbox Code Playgroud) 我最近开始使用java,当我需要从jTable开始创建一个excel文件时,我遇到了apache poi库的一些问题.
我已经阅读了许多线程,并提出了一些不起作用的代码(即使这很简单,有许多例子,这让我看起来更加愚蠢)而且我希望有人可以帮助我.
所以这里是问题:
a)为什么写入excel文件的for循环不填充每个单元格?(excel文件中唯一包含数据的行是第六行,这也让我想知道为什么它会为getRowCount/Column方法计算表模型中的空项.所以我知道它打印的是自定义String而不是表本身但保留点b)
b)我应该如何使用jtable模型项来填充excel文件,因为在创建表时我必须选择Object作为行类型?(我也遇到了这类对象的问题,只要它是一个字符串||整数就没有任何问题,但是这个表应该是两者的混合,当你尝试时它似乎不起作用使用setCellValue()方法与String || integer ...或至少我无法使其工作的东西
c)假设我之后想要从我之前创建的文件中填充jtable,在使用bufferedReader类读取文件后,我是否只需要使用解决方案指向b)(另一种方法)?
免责声明:代码的第一部分是由netbeans自动生成的,你可以告诉我,我提出的hssf部分是在最后但是我想你可能想看到整件事,抱歉,如果它看起来有点凌乱.
这是代码:
package poitest;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JTable;
import javax.swing.table.TableModel;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.*;
public class POITestFrame extends javax.swing.JFrame {
/**
* Creates new form POITestFrame
*/
public POITestFrame() {
initComponents();
}
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
private void initComponents() {
excelButton = new javax.swing.JButton();
jScrollPane1 = new javax.swing.JScrollPane();
jTable1 = new javax.swing.JTable();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
excelButton.setText("ESPORTA!"); …
Run Code Online (Sandbox Code Playgroud) 我一直在使用给出的示例代码来搜索工作表的内容:
Sheet sheet1 = wb.getSheetAt(0);
for (Row row : sheet1) {
for (Cell cell : row) {
CellReference cellRef = new CellReference(row.getRowNum(), cell.getCellNum());
System.out.print(cellRef.formatAsString());
System.out.print(" - ");
switch(cell.getCellType()) {
case Cell.CELL_TYPE_STRING:
System.out.println(cell.getRichStringCellValue().getString());
break;
case Cell.CELL_TYPE_NUMERIC:
if(DateUtil.isCellDateFormatted(cell)) {
System.out.println(cell.getDateCellValue());
} else {
System.out.println(cell.getNumericCellValue());
}
break;
case Cell.CELL_TYPE_BOOLEAN:
System.out.println(cell.getBooleanCellValue());
break;
case Cell.CELL_TYPE_FORMULA:
System.out.println(cell.getCellFormula());
break;
default:
System.out.println();
}
}
Run Code Online (Sandbox Code Playgroud)
}
But can't find a way to properly compare the dates extracted from the sheet with a given date. I've tried using a data …
实际上我尝试使用java在HSSFCell中存储一些数据,但是我得到了一个错误
java.lang.IllegalArgumentException: The maximum length of cell contents (text) i
s 32,767 characters
at org.apache.poi.hssf.usermodel.HSSFCell.setCellValue(HSSFCell.java:559
)
at org.apache.poi.hssf.usermodel.HSSFCell.setCellValue(HSSFCell.java:533
)
at application.ExtractUI.datatoexcel(ExtractUI.java:272)
at application.ExtractUI$3.getData(ExtractUI.java:208)
at application.ExtractUI$3.handle(ExtractUI.java:198)
at application.ExtractUI$3.handle(ExtractUI.java:1)
Run Code Online (Sandbox Code Playgroud)
任何人都可以建议我增加细胞长度的方法,即超过32767个字符???
我使用以下代码,我得到了上述错误
public void datatoexcel(ResultSet rs) {
try {
int iter = 0;
ResultSetMetaData rmeta = rs.getMetaData();
int col = rmeta.getColumnCount();
HSSFWorkbook workbook = new HSSFWorkbook();
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("ddMMyyyy HHmmss");
String pa = pth + "\\" + sdf.format(date) + ".xlsx";
System.out.println(pa);
FileOutputStream out = new FileOutputStream(new …
Run Code Online (Sandbox Code Playgroud)