導航:首頁 > 編程語言 > javaexcelcell寬度

javaexcelcell寬度

發布時間:2023-02-26 16:16:32

A. java導出excel時的CellStyle設置

你用的那個類庫?推薦你用freemarker這個對導出各種類型文檔很方便。不用你在代碼裡面實現表格樣式,只要做好模版即可。

B. 如何使用java代碼實現設置excel單元格的格式。

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
/**
* @param inputFile 輸入模板文件路徑
* @param outputFile 輸入文件存放於伺服器路徑
* @param dataList 待導出數據
* @throws Exception
* @roseuid:
*/
public void exportExcelFile(String inputFile, String outputFile, List dataList) throws Exception
{
//用模板文件構造poi
POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream(inputFile));
//創建模板工作表
HSSFWorkbook templatewb = new HSSFWorkbook(fs);
//直接取模板第一個sheet對象
HSSFSheet templateSheet = templatewb.getSheetAt(1);
//得到模板的第一個sheet的第一行對象 為了得到模板樣式
HSSFRow templateRow = templateSheet.getRow(0);

//HSSFSheet timplateSheet = templatewb.getSheetAt(1);
//取得Excel文件的總列數
int columns = templateSheet.getRow((short) 0).getPhysicalNumberOfCells();
Debug.println("columns is : " + columns);
//創建樣式數組
HSSFCellStyle styleArray[] = new HSSFCellStyle[columns];

//一次性創建所有列的樣式放在數組里
for (int s = 0; s < columns; s++)
{
//得到數組實例
styleArray[s] = templatewb.createCellStyle();
}
//循環對每一個單元格進行賦值
//定位行
for (int rowId = 1; rowId < dataList.size(); rowId++)
{
//依次取第rowId行數據 每一個數據是valueList
List valueList = (List) dataList.get(rowId - 1);
//定位列
for (int columnId = 0; columnId < columns; columnId++)
{
//依次取出對應與colunmId列的值
//每一個單元格的值
String dataValue = (String) valueList.get(columnId);
//取出colunmId列的的style
//模板每一列的樣式
HSSFCellStyle style = styleArray[columnId];
//取模板第colunmId列的單元格對象
//模板單元格對象
HSSFCell templateCell = templateRow.getCell((short) columnId);
//創建一個新的rowId行 行對象
//新建的行對象
HSSFRow hssfRow = templateSheet.createRow(rowId);
//創建新的rowId行 columnId列 單元格對象
//新建的單元格對象
HSSFCell cell = hssfRow.createCell((short) columnId);
//如果對應的模板單元格 樣式為非鎖定
if (templateCell.getCellStyle().getLocked() == false)
{
//設置此列style為非鎖定
style.setLocked(false);
//設置到新的單元格上
cell.setCellStyle(style);
}
//否則樣式為鎖定
else
{
//設置此列style為鎖定
style.setLocked(true);
//設置到新單元格上
cell.setCellStyle(style);
}
//設置編碼
cell.setEncoding(HSSFCell.ENCODING_UTF_16);
//Debug.println("dataValue : " + dataValue);
//設置值 統一為String
cell.setCellValue(dataValue);
}
}
//設置輸入流
FileOutputStream fOut = new FileOutputStream(outputFile);
//將模板的內容寫到輸出文件上
templatewb.write(fOut);
fOut.flush();

//操作結束,關閉文件
fOut.close();

}

C. java導出excel怎麼實現公式

/**
* @author liuwu
* Excel的導入與導出
*/
@SuppressWarnings({ "unchecked" })
public class ExcelOperate {
/**
* @author liuwu
* 這是一個通用的方法,利用了JAVA的反射機制,
* 可以將放置在JAVA集合中並且符合一定條件的數據以EXCEL的形式輸出到指定IO設備上
* @param title 表格標題名
* @param headers 表格屬性列名數組
* @param dataset 需要顯示的數據集合,集合中一定要放置符合javabean風格的類的對象。
* 此方法支持的 javabean屬性【數據類型有java基本數據類型及String,Date,byte[](圖片轉成位元組碼)】
* @param out 與輸出設備關聯的流對象,可以將EXCEL文檔導出到本地文件或者網路
* @param pattern 如果有時間數據,設定輸出格式。默認為"yyy-MM-dd"
* @throws IOException
*/
public static void exportExcel(String title, String[] headers,Collection dataset, OutputStream out, String pattern) throws IOException {
// 聲明一個工作薄
HSSFWorkbook workbook = new HSSFWorkbook();
// 生成一個表格
HSSFSheet sheet = workbook.createSheet(title);
// 設置表格默認列寬度為15個位元組
sheet.setDefaultColumnWidth((short) 20);
// 生成一個樣式
HSSFCellStyle style = workbook.createCellStyle();
// 設置這些樣式
style.setFillForegroundColor(HSSFColor.SKY_BLUE.index);
style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
style.setBorderBottom(HSSFCellStyle.BORDER_THIN);
style.setBorderLeft(HSSFCellStyle.BORDER_THIN);
style.setBorderRight(HSSFCellStyle.BORDER_THIN);
style.setBorderTop(HSSFCellStyle.BORDER_THIN);
style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
// 生成一個字體
HSSFFont font = workbook.createFont();
font.setColor(HSSFColor.VIOLET.index);
font.setFontHeightInPoints((short) 12);
font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
// 把字體應用到當前的樣式
style.setFont(font);
// 生成並設置另一個樣式
HSSFCellStyle style2 = workbook.createCellStyle();
style2.setFillForegroundColor(HSSFColor.LIGHT_YELLOW.index);
style2.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
style2.setBorderBottom(HSSFCellStyle.BORDER_THIN);
style2.setBorderLeft(HSSFCellStyle.BORDER_THIN);
style2.setBorderRight(HSSFCellStyle.BORDER_THIN);
style2.setBorderTop(HSSFCellStyle.BORDER_THIN);
style2.setAlignment(HSSFCellStyle.ALIGN_CENTER);
style2.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
// 生成另一個字體
HSSFFont font2 = workbook.createFont();
font2.setBoldweight(HSSFFont.BOLDWEIGHT_NORMAL);
// 把字體應用到當前的樣式
style2.setFont(font2);
// 產生表格標題行
HSSFRow row = sheet.createRow(0);
for (short i = 0; i < headers.length; i++) {
HSSFCell cell = row.createCell(i);
cell.setCellStyle(style);
HSSFRichTextString text = new HSSFRichTextString(headers[i]);
cell.setCellValue(text);
}
// 遍歷集合數據,產生數據行
Iterator it = dataset.iterator();
int index = 0;
while (it.hasNext()) {
index++;
row = sheet.createRow(index);
Object t = it.next();
// 利用反射,根據javabean屬性的先後順序,動態調用getXxx()方法得到屬性值
Field[] fields = t.getClass().getDeclaredFields();
for (short i = 0; i < fields.length; i++) {
HSSFCell cell = row.createCell(i);
cell.setCellStyle(style2);
Field field = fields[i];
String fieldName = field.getName();
String getMethodName = "get"
+ fieldName.substring(0, 1).toUpperCase()
+ fieldName.substring(1);//注意 實體get Set不要自己改名字不然反射會有問題
try {
Class tCls = t.getClass();
Method getMethod = tCls.getMethod(getMethodName,new Class[] {});
Object value = getMethod.invoke(t, new Object[] {});
HSSFRichTextString richString = new HSSFRichTextString(value.toString());
HSSFFont font3 = workbook.createFont();
font3.setColor(HSSFColor.BLUE.index);
richString.applyFont(font3);
cell.setCellValue(richString);
} catch (SecurityException e) {
e.printStackTrace();
e=null;
} catch (NoSuchMethodException e) {
e.printStackTrace();
e=null;
} catch (IllegalArgumentException e) {
e.printStackTrace();
e=null;
} catch (IllegalAccessException e) {
e.printStackTrace();
e=null;
} catch (InvocationTargetException e) {
e.printStackTrace();
e=null;
} finally {
// 清理資源
}
}
}
try {
workbook.write(out);
} catch (IOException e) {
e.printStackTrace();
e=null;
}
}
}

D. java 導出excel 怎麼設置單元格寬度自適應

POI是apache提供的一個讀寫Excel文檔的開源組件,在操作excel時常要合並單元格,合並單元格的方法是:
sheet.addMergedRegion(new CellRangeAddress(1, 1, 0, 2));
自適應列寬度:
sheet.autoSizeColumn(1);
sheet.autoSizeColumn(1, true);
這兩種方式都是自適應列寬度,但是注意這個方法在後邊的版本才提供,poi的版本不要太老。 注意:第一個方法在合並單元格的的單元格並不好使,必須用第二個方法。
sheet.setColumnWidth(m, 「列名」.getBytes().length*2*256);
這個方法是計算字元串的長度,以便設置列寬,該方法在解決中文的問題上比較好,前面兩種方法對中文不好好用。。。。

還有在自適應寬度的時候,有時候遇到單元格是公式單元格,自適應不起作用,那是因為單元格存的是公式,並不是真正的數據,解決方法:
HSSFFormulaEvaluator evaluator = new HSSFFormulaEvaluator(sheet.getWorkbook());

CellValue cell71Val = evaluator.evaluate(cell71);
cell71.setCellValue(cell71Val.getNumberValue());
將格式化後的數據再次set進去,就是真正的值了。

E. java操作excel的問題

可以是一下GCExcel這個組件,相較POI,GCExcel在功能上更加完善,並且完全參照Excel的規范。如果想要刪除行不留空白行,直接在GCExcel調用刪除命令就可以了,不需要再做上移的操作,更加易於理解。刪除行時只需要輸入行的名稱或者索引,像這樣:

worksheet2.getRange("A3:A5").getEntireRow().delete();

或worksheet2.getRange("2:4").delete(); 支持刪除多行。

參考文檔:網頁鏈接

F. java 導出excel 怎樣設置單元格寬度自適應

importjava.io.FileOutputStream;

importorg.apache.poi.hssf.usermodel.HSSFCell;
importorg.apache.poi.hssf.usermodel.HSSFCellStyle;
importorg.apache.poi.hssf.usermodel.HSSFFont;
importorg.apache.poi.hssf.usermodel.HSSFRow;
importorg.apache.poi.hssf.usermodel.HSSFSheet;
importorg.apache.poi.hssf.usermodel.HSSFWorkbook;
importorg.apache.poi.hssf.usermodel.HSSFRichTextString;
importorg.apache.poi.hssf.usermodel.HSSFDataFormat;
importorg.apache.poi.hssf.usermodel.HSSFComment;
importorg.apache.poi.hssf.usermodel.HSSFPatriarch;
importorg.apache.poi.hssf.usermodel.HSSFClientAnchor;

publicclassPoiCreateExcelTest{
publicstaticvoidmain(String[]args){
/**
*@see<ahref="http://poi.apache.org/hssf/quick-guide.html#NewWorkbook">Formore</a>
*/
//創建新的Excel工作簿
HSSFWorkbookworkbook=newHSSFWorkbook();

//在Excel工作簿中建一工作表,其名為預設值,也可以指定Sheet名稱
HSSFSheetsheet=workbook.createSheet();
//HSSFSheetsheet=workbook.createSheet("SheetName");

//用於格式化單元格的數據
HSSFDataFormatformat=workbook.createDataFormat();

//創建新行(row),並將單元格(cell)放入其中.行號從0開始計算.
HSSFRowrow=sheet.createRow((short)1);

//設置字體
HSSFFontfont=workbook.createFont();
font.setFontHeightInPoints((short)20);//字體高度
font.setColor(HSSFFont.COLOR_RED);//字體顏色
font.setFontName("黑體");//字體
font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);//寬度
font.setItalic(true);//是否使用斜體
//font.setStrikeout(true);//是否使用劃線

//設置單元格類型
HSSFCellStylecellStyle=workbook.createCellStyle();
cellStyle.setFont(font);
cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);//水平布局:居中
cellStyle.setWrapText(true);

//添加單元格注釋
//創建HSSFPatriarch對象,HSSFPatriarch是所有注釋的容器.
HSSFPatriarchpatr=sheet.createDrawingPatriarch();
//定義注釋的大小和位置,詳見文檔
HSSFCommentcomment=patr.createComment(newHSSFClientAnchor(0,0,0,0,(short)4,2,(short)6,5));
//設置注釋內容
comment.setString(newHSSFRichTextString("可以在POI中添加註釋!"));
//設置注釋作者.當滑鼠移動到單元格上是可以在狀態欄中看到該內容.
comment.setAuthor("Xuys.");

//創建單元格
HSSFCellcell=row.createCell((short)1);
HSSFRichTextStringhssfString=newHSSFRichTextString("HelloWorld!");
cell.setCellValue(hssfString);//設置單元格內容
cell.setCellStyle(cellStyle);//設置單元格樣式
cell.setCellType(HSSFCell.CELL_TYPE_STRING);//指定單元格格式:數值、公式或字元串
cell.setCellComment(comment);//添加註釋

//格式化數據
row=sheet.createRow((short)2);
cell=row.createCell((short)2);
cell.setCellValue(11111.25);
cellStyle=workbook.createCellStyle();
cellStyle.setDataFormat(format.getFormat("0.0"));
cell.setCellStyle(cellStyle);

row=sheet.createRow((short)3);
cell=row.createCell((short)3);
cell.setCellValue(9736279.073);
cellStyle=workbook.createCellStyle();
cellStyle.setDataFormat(format.getFormat("#,##0.0000"));
cell.setCellStyle(cellStyle);


sheet.autoSizeColumn((short)0);//調整第一列寬度
sheet.autoSizeColumn((short)1);//調整第二列寬度
sheet.autoSizeColumn((short)2);//調整第三列寬度
sheet.autoSizeColumn((short)3);//調整第四列寬度

try{
FileOutputStreamfileOut=newFileOutputStream("C:/3.xls");
workbook.write(fileOut);
fileOut.close();
}catch(Exceptione){
System.out.println(e.toString());
}
}

}

G. java生成excel設置列寬,漢字問題

貌似只能大概猜測。因為英文的字元不是等寬的,另外也和font-size, font-family有關。

如果是12號字體,一個漢字的寬度應該是12像素,一個字母應該大致是6像素。
你還需要將1像素轉化為1excel單元格的寬度單位。

H. java端導出Excel表格。

可以使用poi來實現導出execl表格或者通過io流實現導出execl表格,但是poi相對來說更方便
實例如下:
try{
HSSFWorkbook workbook = new HSSFWorkbook(); // 創建工作簿對象
HSSFSheet sheet = workbook.createSheet(title); // 創建工作表

// 產生表格標題行
HSSFRow rowm = sheet.createRow(0);
HSSFCell cellTiltle = rowm.createCell(0);

//sheet樣式定義【getColumnTopStyle()/getStyle()均為自定義方法 - 在下面 - 可擴展】
HSSFCellStyle columnTopStyle = this.getColumnTopStyle(workbook);//獲取列頭樣式對象
HSSFCellStyle style = this.getStyle(workbook); //單元格樣式對象

sheet.addMergedRegion(new CellRangeAddress(0, 1, 0, (rowName.length-1)));
cellTiltle.setCellStyle(columnTopStyle);
cellTiltle.setCellValue(title);

// 定義所需列數
int columnNum = rowName.length;
HSSFRow rowRowName = sheet.createRow(2); // 在索引2的位置創建行(最頂端的行開始的第二行)

// 將列頭設置到sheet的單元格中
for(int n=0;n<columnNum;n++){
HSSFCell cellRowName = rowRowName.createCell(n); //創建列頭對應個數的單元格
cellRowName.setCellType(HSSFCell.CELL_TYPE_STRING); //設置列頭單元格的數據類型
HSSFRichTextString text = new HSSFRichTextString(rowName[n]);
cellRowName.setCellValue(text); //設置列頭單元格的值
cellRowName.setCellStyle(columnTopStyle); //設置列頭單元格樣式
}

//將查詢出的數據設置到sheet對應的單元格中
for(int i=0;i<dataList.size();i++){

Object[] obj = dataList.get(i);//遍歷每個對象
HSSFRow row = sheet.createRow(i+3);//創建所需的行數

for(int j=0; j<obj.length; j++){
HSSFCell cell = null; //設置單元格的數據類型
if(j == 0){
cell = row.createCell(j,HSSFCell.CELL_TYPE_NUMERIC);
cell.setCellValue(i+1);
}else{
cell = row.createCell(j,HSSFCell.CELL_TYPE_STRING);
if(!"".equals(obj[j]) && obj[j] != null){
cell.setCellValue(obj[j].toString()); //設置單元格的值
}
}
cell.setCellStyle(style); //設置單元格樣式
}
}
//讓列寬隨著導出的列長自動適應
for (int colNum = 0; colNum < columnNum; colNum++) {
int columnWidth = sheet.getColumnWidth(colNum) / 256;
for (int rowNum = 0; rowNum < sheet.getLastRowNum(); rowNum++) {
HSSFRow currentRow;
//當前行未被使用過
if (sheet.getRow(rowNum) == null) {
currentRow = sheet.createRow(rowNum);
} else {
currentRow = sheet.getRow(rowNum);
}
if (currentRow.getCell(colNum) != null) {
HSSFCell currentCell = currentRow.getCell(colNum);
if (currentCell.getCellType() == HSSFCell.CELL_TYPE_STRING) {
int length = currentCell.getStringCellValue().getBytes().length;
if (columnWidth < length) {
columnWidth = length;
}
}
}
}
if(colNum == 0){
sheet.setColumnWidth(colNum, (columnWidth-2) * 256);
}else{
sheet.setColumnWidth(colNum, (columnWidth+4) * 256);
}
}

if(workbook !=null){
try
{
String fileName = "Excel-" + String.valueOf(System.currentTimeMillis()).substring(4, 13) + ".xls";
String headStr = "attachment; filename=\"" + fileName + "\"";
response = getResponse();
response.setContentType("APPLICATION/OCTET-STREAM");
response.setHeader("Content-Disposition", headStr);
OutputStream out = response.getOutputStream();
workbook.write(out);
}
catch (IOException e)
{
e.printStackTrace();
}
}

}catch(Exception e){
e.printStackTrace();
}

}

閱讀全文

與javaexcelcell寬度相關的資料

熱點內容
jsonformat註解用法 瀏覽:697
設置ipad需要選擇備份文件路徑 瀏覽:309
電腦文件怎麼保存到桌面不卡 瀏覽:810
java獲得本機外網的ip地址 瀏覽:391
微信小程序ios能過么 瀏覽:208
蘋果app後台耗電太大怎麼關閉 瀏覽:178
怎麼查看zabbix版本號 瀏覽:327
手機app整合文件名 瀏覽:492
壓縮包保存文件找不到臨時文件 瀏覽:958
iphone4來電mv素材 瀏覽:684
資料庫怎麼查速度 瀏覽:89
項目數據分析師證在哪裡查詢 瀏覽:725
淘寶怎麼免費升級專業版 瀏覽:771
淘特app買手機殼如何微信支付 瀏覽:59
windows遷移到mac的文件找不到了 瀏覽:674
最近比較火的網路游戲有哪些 瀏覽:377
linuxoracle日誌 瀏覽:54
計算機網路課程作用 瀏覽:902
win10下ftp伺服器搭建 瀏覽:150
oppo原配數據線多少錢 瀏覽:835

友情鏈接