第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Apache POI:找出溢出到下一列的文本的 colspan

Apache POI:找出溢出到下一列的文本的 colspan

慕桂英3389331 2022-12-28 15:46:03
我正在使用 Apache POI 將 Excel 轉(zhuǎn)換為 HTML。我希望 HTML 表格與它在 Excel 中顯示的完全一樣。我經(jīng)常看到 Excel 單元格中的數(shù)據(jù)溢出到下一列的情況。有沒有辦法找出數(shù)據(jù)跨越多少列,以便我可以向標(biāo)簽添加colspan屬性?TD從 Excel 中查看此屏幕截圖:在這種情況下,單元格 A2 中的數(shù)據(jù)溢出到單元格 B2(A3 也溢出到 B3)。有沒有辦法查到A2單元格對應(yīng)的TD標(biāo)簽需要colspan="2"屬性?數(shù)據(jù)溢出的單元格沒有合并,所以我不能真正使用像sheet.getNumMergedRegions()我想如果我能以某種方式找出 Excel 中列的“可見”寬度,我也可以計算它。但是,sheet.getColumnWidth()僅提供實際寬度。我沒有看到在 Excel 中找出列的“可見”寬度的方法。在上面的截圖鏈接中,A 列的可見寬度非常小。有沒有辦法找到“可見”寬度?我正在使用 Apache POI 3.17
查看完整描述

1 回答

?
人到中年有點甜

TA貢獻1895條經(jīng)驗 獲得超7個贊

Apache poi能夠根據(jù)內(nèi)容自動調(diào)整列的大小。所以它需要能夠計算特殊內(nèi)容需要的列寬。這就是SheetUtil.getCellWidth正在做的事情。


此外,還需要了解Microsoft在Excel. 例如,在ExcelsGUI中,列寬為 10 意味著默認字符寬度的 10 個字符適合單元格寬度。但在內(nèi)部,寬度是以默認字符寬度的 1/256 為單位計算的。這就是為什么apache poi決定以字符寬度的 1/256 為單位獲取Sheet.getColumnWidth的原因。


所以如果你有一個Cell cell單元格索引c和一個特殊的內(nèi)容,那么使用


Workbook workbook...

...

DataFormatter dataFormatter = new DataFormatter();

...

int defaultCharWidth = SheetUtil.getDefaultCharWidth(workbook);

...

double cellValueWidth = SheetUtil.getCellWidth(cell, defaultCharWidth, dataFormatter, false);

int neededColunmnWidth = (int)cellValueWidth*256;

int columnWidth = sheet.getColumnWidth(c);

...

您可以確定內(nèi)容是否適合單元格。它適合 if columnWidth >= neededColunmnWidth,否則它不適合并且colspan必須使用。


讓我們有一個完整的例子來說明原理:


床單:

http://img1.sycdn.imooc.com//63abf46200017f4a06250156.jpg

代碼:


import org.apache.poi.ss.usermodel.*;

import org.apache.poi.ss.util.SheetUtil;


import java.io.*;


class ExcelToHTMLColspan {


 public static void main(String[] args) throws Exception{


  Workbook workbook = WorkbookFactory.create(new FileInputStream("Test.xlsx"));


  DataFormatter dataFormatter = new DataFormatter();


  int defaultCharWidth = SheetUtil.getDefaultCharWidth(workbook);


  int lastColumnToExport = 5; // column E


  Sheet sheet = workbook.getSheetAt(0);


  Row row;

  Cell cell;

  String cellValue;


  StringBuilder tableHTML = new StringBuilder();


  tableHTML.append("<TABLE>");

  tableHTML.append("<COLGROUP>");

  for (int c = 0; c < lastColumnToExport; c++) {

   long columnWidthPx = Math.round(sheet.getColumnWidthInPixels(c));

   tableHTML.append("<COL width=\"" + columnWidthPx + "\"/>");

  }

  tableHTML.append("</COLGROUP>");


  for (int r = 0; r <= sheet.getLastRowNum(); r++) {

   row = sheet.getRow(r); if (row == null) row = sheet.createRow(r);

   long rowHeightPx = Math.round(row.getHeightInPoints() * 92f / 72f);

   tableHTML.append("<TR height=\"" + rowHeightPx + "\">");

   int c = 0;

   while(c < lastColumnToExport) {

    tableHTML.append("<TD");

    cell = row.getCell(c); if (cell == null) cell = row.createCell(c);

    cellValue = dataFormatter.formatCellValue(cell);

    double cellValueWidth = SheetUtil.getCellWidth(cell, defaultCharWidth, dataFormatter, false);

    int neededColunmnWidth = (int)cellValueWidth*256;

    int columnWidth = sheet.getColumnWidth(c);

    if (columnWidth < neededColunmnWidth) {

     int colSpan = 1;

     while(columnWidth < neededColunmnWidth) {

      colSpan++;

      c++;

      columnWidth += sheet.getColumnWidth(c);

     } 

     tableHTML.append(" colspan=\"" + colSpan + "\""  + ">" + cellValue);

     c++;

    } else {

     tableHTML.append(">" + cellValue);

     c++;

    }

    tableHTML.append("</TD>");

   }

   tableHTML.append("</TR>");

  }


  tableHTML.append("</TABLE>");


  workbook.close();


System.out.println(tableHTML.toString());


  //creating a sample HTML file 

  String encoding = "UTF-8";

  FileOutputStream fos = new FileOutputStream("result.html");

  OutputStreamWriter writer = new OutputStreamWriter(fos, encoding);

  writer.write("<!DOCTYPE html>\n");

  writer.write("<html lang=\"en\">");

  writer.write("<head>");

  writer.write("<meta charset=\"utf-8\"/>");

  writer.write("<style>");

  writer.write("table {border-collapse: collapse; table-layout: fixed;}");

  writer.write("table, tr, td {border: 1px solid black;}");

  writer.write("td {font: 11pt Calibri, arial, sans-serif;}");

  writer.write("</style>");

  writer.write("</head>");

  writer.write("<body>");


  writer.write(tableHTML.toString());


  writer.write("</body>");

  writer.write("</html>");

  writer.close();


  java.awt.Desktop.getDesktop().browse(new File("result.html").toURI());


 }

}

結(jié)果:

http://img1.sycdn.imooc.com//63abf46e0001dfcc05470242.jpg

查看完整回答
反對 回復(fù) 2022-12-28
  • 1 回答
  • 0 關(guān)注
  • 169 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號