POI Excel HTML單元格公式問題

2021-08-27 22:18:59 字數 1371 閱讀 2683

一、問題描述

使用mybatis從資料庫中獲取資料,然後用poi把資料填充到excel模板中,生成最終的xls檔案。把最終的xls檔案轉換為html檔案,並返回給前台顯示在panel中。

excel模板中,除了資料點位符外,還有一些計算公式。由於這些計算公式引用的資料在模板中是點位符,所以計算單元顯示為「#value!」。見下圖:

生成excel檔案,在新增了重算的相關**(見下文)後,計算單元格的值能夠正常顯示。轉換為html後,這些計算單元格不會重新計算,仍然顯示為「#value!」。

二、問題分析

這個問題一直存在了兩周左右,期間斷斷續續地花了一些時間研究,但問題沒有得到解決。

這種使用第三方元件導致的問題,排查起來比較困難。在網上搜尋了一大圈,沒有發現對類似問題的描述。有一些關於使用poi重新計算excel單元格公式的內容可參考。

看了一下相關的源**,poi把_record等屬性設定為private,呼叫時無法修改。又在網上搜尋了一番,更加沒有什麼有參考價值的資訊。

三、問題解決

在用excel開啟並關閉填充資料後生成的xls檔案時,excel總是會提示是否要儲存,但實際上沒有進行任何的修改。如果「儲存」這個模板,再生成html,單元格公式會計算,顯示正常。總是感覺poi生成的xls檔案實際上還是有相容性問題,但ms在office2007以前並沒有開發相關檔案的格式及說明,所以也怪不到poi。

生成excel後,重新對公式單元格進行計算:

【僅僅setforceformularecalculation(boolean.true)在轉換為html時是無效的】

正式工程和一開始的測試**中,取數生成excel、轉換為html是寫在乙個function中的。在測試中感覺不是太方便。於是就把生個excel、轉為html拆分為兩個function,以便於控制是否重新生成excel。沒想到拆分完一執行測試**,html中的計算單元竟然有值了!簡直是簡直了!

然後把正式工程中的**也拆分了一下,這個讓人抓狂的問題,就以這種無厘頭的方式解決了。

四、問題總結

在同乙個方法裡進行生成xls檔案、轉換為html有問題,拆分為兩個方法後就沒有問題。這種現象是比較怪異的,應該還是**層面存在問題。暫時就不再深究了。

labview 活動單元格 活動單元格屬性

短名稱 activecell 必需 基礎軟體包 類 多列列表框類的屬性 用途 建立屬性。設定活動單元格的行和列。名稱說明 行設定活動單元格的行。取值範圍為0至n,n為行數 1。輸入 2可選擇所有行。列設定活動單元格的列。取值範圍為0至m,m為列數 1。輸入 2可選擇所有列。輸入 1可選擇列首。下表為...

清空合併單元格之隱藏單元格

合併單元格有真有假,如果大家不知道二者的區別,請移步 excel合併單元格之真假李逵 先了解一下。識別兩種合併單元格的方法也很簡單,輔助列使用公式讀取一下單元格內容,如果合併單元格之隱藏單元格仍然有內容,那麼這就是貼上格式建立的合併單元格。接下來要講的合併單元格是用貼上格式產生的,如果希望清空d列中...

合併單元格

青年 老大,最近在 中合併單元格,總是不明就裡,好像是合併對了,有時也是蒙的,您能不能就此指條明路?禪師 這個問題很簡單,合併單元格分為跨行合併和跨列合併,這是標籤的rowspan和colspan屬性問題,已知3x3 禪師 首先說說跨行合併rowspan,由於我們書寫 的習慣是標籤包裹便簽,因此書寫...