使用Apache POI在Excel中插入文件超链接时,列会被隐藏

时间:2014-01-23 22:36:43

标签: apache-poi

我正在尝试插入(进入excel单元格),指向本地系统中文件的超链接。链接已添加但列已隐藏。 Sheet.autosizeColumn(colNum)似乎不起作用。这只发生在超链接上。如果我在单元格中放置一个普通字符串,则不会隐藏列。

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFDateUtil;
import org.apache.poi.hssf.util.HSSFColor;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.IndexedColors;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFCellStyle;
import org.apache.poi.xssf.usermodel.XSSFCreationHelper;
import org.apache.poi.xssf.usermodel.XSSFFont;
import org.apache.poi.xssf.usermodel.XSSFHyperlink;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class Xls_Reader {

    public  String path;
    public  FileInputStream fis = null;
    public  FileOutputStream fileOut =null;
    private XSSFWorkbook workbook = null;
    private XSSFSheet sheet = null;
    private XSSFRow row   =null;
    private XSSFCell cell = null;

    public Xls_Reader(String path) {

        this.path=path;
        try {
            fis = new FileInputStream(path);
            workbook = new XSSFWorkbook(fis);
            sheet = workbook.getSheetAt(0);
            fis.close();
        } catch (Exception e) {

            e.printStackTrace();
        } 





    public boolean setCellData(String sheetName,String colName,int rowNum, String data,String url){

        try{

         url =  url.replaceAll("\\\\", "/");

        System.out.println(url);

        fis = new FileInputStream(path); 
        workbook = new XSSFWorkbook(fis);

        if(rowNum<=0)
            return false;

        int index = workbook.getSheetIndex(sheetName);

        int colNum=-1;
        if(index==-1)
            return false;


        sheet = workbook.getSheetAt(index);

        row=sheet.getRow(0);



        for(int i=0;i<row.getLastCellNum();i++){


            if(row.getCell(i).getStringCellValue().trim().equalsIgnoreCase(colName))
                colNum=i;
        }

        if(colNum==-1)
            return false;
        sheet.autoSizeColumn(colNum); 
        row = sheet.getRow(rowNum-1);
        if (row == null)
            row = sheet.createRow(rowNum-1);

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

        cell.setCellValue(data);
        XSSFCreationHelper createHelper = workbook.getCreationHelper();


        CellStyle hlink_style = workbook.createCellStyle();
        XSSFFont hlink_font = workbook.createFont();
        hlink_font.setUnderline(XSSFFont.U_SINGLE);
        hlink_font.setColor(IndexedColors.BLUE.getIndex());
        hlink_style.setFont(hlink_font);

        XSSFHyperlink link = createHelper.createHyperlink(XSSFHyperlink.LINK_FILE);
        link.setAddress(url);

        link.setTooltip("Click to open the file");

        cell.setHyperlink(link);
        cell.setCellStyle(hlink_style);

        sheet.autoSizeColumn(colNum);


        fileOut = new FileOutputStream(path);
        workbook.write(fileOut);

        fileOut.close();

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


        return true;
    }

    public static void main(String arg[]) throws IOException{

            Xls_Reader rdr = new Xls_Reader("C:\\Users\\file1\\file2.xlsx");

            String url = "file:///C:\\Folde1\\Folder2\\index.htm";

            rdr.setCellData("Summary", "Summary", 17, "CLick", url);



        }

}

0 个答案:

没有答案