簡體   English   中英

Apache POI:從文本框中獲取價值

[英]Apache POI: Get value from textbox

我目前正在編寫從Excel文件讀取值的程序。 對於普通的單元格,它工作正常,但也有文本框,選擇框和組合框,我無法真正訪問。 我知道,這些元素是使用ID創建的。

這是我目前的嘗試:

private void processExcelToXml(File excelFile) throws EncryptedDocumentException, IOException {
        HSSFWorkbook workbook = new HSSFWorkbook(new FileInputStream(excelFile));
    List<HSSFObjectData> embeddedObjects = workbook.getAllEmbeddedObjects();
    List<HSSFObjectData> textBoxList = new ArrayList<>();
    List<HSSFObjectData> comboBoxList = new ArrayList<>();
    List<HSSFObjectData> checkBoxList = new ArrayList<>();


    for (HSSFObjectData hssfObjectData : embeddedObjects) {
        log.info(hssfObjectData.getDirectory().getName());
        switch (hssfObjectData.getOLE2ClassName()) {

            case "Forms.TextBox.1":
                textBoxList.add(hssfObjectData);
                break;
            case "Forms.CheckBox.1":
                checkBoxList.add(hssfObjectData);
                break;
            case "Forms.ComboBox.1":
                comboBoxList.add(hssfObjectData);
                break;
            default:
                break;
        }
    }
}

我知道有一個解決方案( 從Java的Excel中獲取文本框值 ),但是像OP一樣,我沒有任何HSSFTextbox實例,而只有HSSFObjectData。 我的問題是,我可以從這些HSSFObjectDatas中提取鍵入文本框中的值嗎?

謝謝!

復活一個老問題,但是我有一個類,它從命名的textBox讀取Excel Textbox String內容。 以下是相關部分的摘錄。 請注意,“。trim()”很重要,因為形狀名稱似乎添加了訓練空間。 這給我帶來了很多問題。

//Declarations
private HSSFWorkbook wb;
private HSSFWorkbook outputWb;
private HSSFSheet sheet;
private HSSFFont myFont;
private HSSFPatriarch pat;
private HSSFRichTextString str;
private List<HSSFShape> children;

//Constructor
try {
        NPOIFSFileSystem fs = new NPOIFSFileSystem(new File(IN_FILE_NAME));
        wb = new HSSFWorkbook(fs.getRoot(), true);
        sheet = wb.getSheet("Certificate");
        pat = (HSSFPatriarch) sheet.createDrawingPatriarch();
        children = pat.getChildren();

//Methods
private String getText(String textBoxName){
    return getRichText(textBoxName).toString().trim();
}

private  HSSFRichTextString getRichText(String textBoxName) {
    Iterator<HSSFShape> it = children.iterator();
    HSSFRichTextString returnString = null;
    while (it.hasNext()) {
        HSSFShape shape = it.next();
        if (shape.getShapeName().trim().equals(textBoxName)) {
            HSSFTextbox textbox = (HSSFTextbox) shape;
            returnString=textbox.getString();
        }
    }
    return returnString;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM