反饋已提交

網絡繁忙

公式不合法報錯

1. 概述

1.1 版本

報表伺服器版本
功能變動
11.0.1

文法報錯優化

公式編輯框增加「輸入提示」和「關閉前檢查」選項

11.0.3

對於多sheet、多報表塊的範本公式報錯時,公式報錯具體到儲存格所在sheet/報表塊

設計器報錯日誌支援點選定位錯誤位置

1.2 應用場景

函式計算組成和文法 已經說明了在報表中使用函式的計算組成以及基礎的計算文法,但有時使用者也會遇到書寫公式報錯的問題,可根據提示完成公式的正確書寫。

FineReport11.0 對公式的校驗規則和報錯提示進行了優化。

1.3 功能簡介

本文將詳細介紹運算子和表式的文法,幫助使用者瞭解公式校驗方案,正確有效的寫出需要的函式。

注:FineReport11.0.2 以及之後的版本中,進行公式合法性檢查時,如果公式中存在回車(\n)、tab (\t),則無法精準傳回錯誤位置,如果您點選了查看報錯,則游標預設回到公式首位(0位)。

2. 報錯優先說明

報表中報錯優先為:

  • 文法錯誤

    缺少字元、缺少符號、無法識別字元、無法識別符號

注:除了以上四種型別文法報錯,其他文法報錯均顯示為公式不合法。

  • 函式錯誤

  • 函式參數型別錯誤

    函式參數個數錯誤

3. 文法報錯提示

例如,在輸入公式count(A1{len(A1) != 0})統計 A1 儲存格擴展出來的資料中不為空的個數後,由於輸入成count(A1{len(A1) != 0},缺少了一個),點選「檢查合法性」進行校驗,發現提示「缺少匹配的:閉合符號」,點選「檢視錯誤」,游標自動定位到報錯的位置,如下圖所示:

4. 函式不合法提示

4.1 正文函式

函式 / 公式名
合法性說明
結果型別
不合法提示

CHAR

一個在[1-65535](閉區間)範圍內的數值參數

正文

CHAR不符合 (一個[1-65535]的數值) 的參數要求

CODE

一個正文參數

數值

CODE不符合 (正文) 的參數要求

CONCATENATE

多個任意型別參數

正文

--

STARTWITH

兩個任意型別參數

bool

STARTWITH不符合 (任意型別,任意型別) 的參數要求

ENDWITH

兩個任意型別參數

bool

ENDWITH不符合 (任意型別,任意型別) 的參數要求

EXACT

兩個任意型別參數

bool

EXACT不符合 (任意型別,任意型別) 的參數要求

FIND

第一個參數任意型別

第二個參數任意型別

第三個預設參數數值

即:有2/3個參數均合法,3個參數時第三個參數必須為數值型別

數值

FIND不符合 (任意型別,任意型別) 或 (任意型別,任意型別,數值) 的參數要求


FORMAT

第一個參數為日期/數值/正文,第二個參數為正文

正文

FORMAT不符合 (日期/數值/正文,正文) 的參數要求

INDEXOF

兩個參數,第一個為任意型別,第二個為數值

正文

INDEXOF不符合 (任意型別,數值) 的參數要求

LEFT

兩個參數,第一個為任意型別,第二個為大於0的數值,可預設

正文

LEFT不符合(任意型別) 或 (任意型別,數值) 的參數要求


RIGHT

兩個參數,第一個為任意型別,第二個為大於0的數值,可預設

正文

RIGHT不符合(任意型別) 或 (任意型別,數值) 的參數要求


LOWER

單正文參數

正文

LOWER不符合 (正文) 的參數要求

MID

第一個參數為任意型別,第二個,第三個為數值

正文

MID不符合 (任意型別,數值,數值) 的參數要求

REGEXP

兩個參數或三個參數

兩個參數時:

兩個參數為正文

三個參數時:

前兩個參數為正文,第三個參數為數值

BOOL

REGEXP不符合 (正文,正文)或(正文,正文,數值) 的參數要求


REPEAT

兩個參數,第一個為任意型別,第二個為數值

正文

REPEAT不符合 (任意型別,數值) 的參數要求

REPLACE

三個參數都是任意型別

四個參數,第一個是任意型別,第二個第三個是數值,第四個是任意型別

正文

REPLACE不符合 (任意型別,任意型別,任意型別) 或 (任意型別,數值,數值,任意型別) 的參數要求

TODOUBLE

單任意型別參數

數值

TODOUBLE不符合 (任意型別) 的參數要求

TOINTEGER

單任意型別參數

數值

TOINTEGER不符合 (任意型別) 的參數要求

TOSTRING單任意型別參數正文TOSTRING不符合 (任意型別) 的參數要求

TRIM

單正文參數

正文

TRIM不符合 (正文) 的參數要求

UPPER

單正文參數

正文

UPPER不符合 (正文) 的參數要求

LEN

一個[正文、數字、陣列]中任意單一型別參數

數值

LEN不符合 (任意型別) 的參數要求

LEN不符合(一個[正文、數字、陣列]中任意單一型別)的參數要求

SPLIT兩個任意型別的參數陣列SPLIT不符合 (任意型別,任意型別)的參數要求

4.2 日期函式

函式 / 公式名合法性說明結果型別不合法提示
DATE

三個數值參數

日期DATE不符合(數值,數值,數值)的參數要求
DATEDELTA

兩個參數

第一個日期或正文型別參數

第二個為數值型別參數

日期





#函式名#不符合(日期/正文,數值)的參數要求

MONTHDELTA

兩個參數

第一個日期或正文型別參數

第二個參數為數值

時間
YEARDELTA

兩個參數

第一個日期或正文型別參數

第二個參數為數值

日期
DATEDIF

三個或四個參數

三個參數時:

第一、二個日期或正文型別參數

第三個正文

四個參數時:

第一,二個日期或正文型別參數

第三個是正文

第四個是數值

數值DATEDIF不符合(日期/正文,日期/正文,正文)或(日期/正文,日期/正文,正文,數值)的參數要求
DATESUBDATE

三個參數

第一、二個日期或正文型別參數

第三個是正文

數值DATESUBDATE不符合(日期/正文,日期/正文,正文)的參數要求
DATETONUMBER一個日期或正文型別參數數值DATETONUMBER不符合(日期/正文)的參數要求
DAYVALUE一個日期或正文型別參數數值DAYVALUE不符合(日期/正文)的參數要求
DAYSOFMONTH一個日期或正文型別參數數值


#函式名#不符合(日期/正文/數值)的參數要求

DAYSOFQUARTER一個日期或正文型別參數數值
DAYSOFYEAR一個日期或正文型別參數數值
YEAR

無參或者一個參數或者兩個參數

一個預設日期、數值、正文型別參數

兩個參數時為兩個正文型別參數

數值

#函式名#不符合(無參) 或 (日期/數值/正文)或(日期/正文,正文)的參數要求

WEEK

一、二、三、四個參數均可

一個參數時(日期/數值/正文)

二個參數時為(日期/正文,正文)

三個參數時為(日期/正文,正文,正文)

四個參數時為(日期/正文,正文,正文,正文)

數值#函式名#不符合(無參) 或 (日期/數值/正文)的參數要求
DAY

無參或者一個參數或者兩個參數

一個預設日期、數值、正文型別參數

兩個參數時為兩個正文型別參數

數值#函式名#不符合(無參) 或 (日期/數值/正文)或(日期/正文,正文)的參數要求
HOUR

無參或者一個參數或者兩個參數

一個預設日期、數值、正文型別參數

兩個參數時為兩個正文型別參數

數值#函式名#不符合(無參) 或 (日期/數值/正文)或(日期/正文,正文)的參數要求
MINUTE

無參或者一個參數或者兩個參數

一個預設日期、數值、正文型別參數

兩個參數時為兩個正文型別參數

數值#函式名#不符合(無參) 或 (日期/數值/正文)或(日期/正文,正文)的參數要求
MONTH

無參或者一個參數或者兩個參數

一個預設日期、數值、正文型別參數

兩個參數時為兩個正文型別參數

數值#函式名#不符合(無參) 或 (日期/數值/正文)或(日期/正文,正文)的參數要求
SECOND

無參或者一個參數或者兩個參數

一個預設日期、數值、正文型別參數

兩個參數時為兩個正文型別參數

數值#函式名#不符合(無參) 或 (日期/數值/正文)或(日期/正文,正文)的參數要求
TIME

三個數值參數

時間#函式名#不符合 (數值,數值,數值)的參數要求

TODATE

單參,參數為數值或日期或者正文

兩個參數全是正文

兩個參數全是正文

時間TODATE不符合(日期/數值/正文) 或 (正文,正文)或 (正文,正文,正文)的參數要求
NOW無參時間NOW不符合(無參)的參數要求
TODAY無參
TODAY不符合(無參)的參數要求
WEEKDATE四個數值參數時間WEEKDATE不符合(數值,數值,數值,數值)的參數要求
WEEKDAY

一個日期或正文型別參數

數值WEEKDAY不符合(日期/正文)的參數要求

4.3 數學和三角函式

函式 / 公式名合法性說明傳回型別公式不合法提示
PI一個數值型別參數,可預設數值PI不符合(數值)或(空)的參數要求
CEILING










單數值參數










數值










#函式名#不符合(數值)的參數要求

Floor
INT
SQRT
LN
SQRT
ABS
ACOS
ASIN
ATAN
LOG10
SIN
TAN
COS
EXP
DEGREES
SIGN
RADIANS
RAND無參數值RAND不符合(無參)的參數要求
RANGE

1-3個數值參數

合法規則為0<參數個數< 3且參數為數值型別

陣列RANGE不符合(數值,數值,數值)的參數要求
SUM無參數個數限制,任意型別數值
COUNT無參數個數限制,任意型別數值
MIN大於0個數值參數數值#函式名# 不符合所有參數為相同型別的要求
MAX
RANDBETWEEN

兩個數值參數

數值

#函式名#不符合(數值,數值)的參數要求

MOD兩個數值參數數值#函式名#不符合(數值,數值)的參數要求
POWER兩個數值參數數值#函式名#不符合(數值,數值)的參數要求
ROUND

兩個數值參數

三個參數:前兩個數值,第三個布爾

數值#函式名#不符合(數值,數值)或(數值,數值,布爾)的參數要求
ATAN2兩個數值參數數值#函式名#不符合(數值,數值)的參數要求
PROMOTION兩個數值參數數值#函式名#不符合(數值,數值)的參數要求
LOG

第一個參數數值,第二個預設數值

數值#函式名#不符合(數值,數值)或(數值)的參數要求
TRUNC

4.4 邏輯函式

注: 報表公式中沒有數值與bool型別之間的轉換,所以當前公式僅支援 bool 型別參數,不支援數字與 bool 型別的轉換。

函式 / 公式名
合法性說明
結果型別
不合法提示
AND參數為bool型別或數值型別boolAND的參數型別必須為布林型別或數值型別
OR參數為bool型別或數值型別boolOR的參數型別必須為布林型別為bool型別或數值型別
IF

IF,三個參數,第二個和第三個參數為數值或正文型別,第一個為為bool型別(此處bool型別不包括數字)

傳回結果參數中第一個非空的參數型別(第二個和第三個參數為傳回值參數)

第一個參數不為bool型別時提示:IF表式的第一個參數不符合布林型別為bool型別

IF表式第二、三個參數不為數值或正文型別時提示:IF表式的結果型別必須為正文或數值型別

不滿足三個參數個數時提示:IF表式不滿足3個參數的參數個數要求


SWITCH

參數個數至少3個,且結果參數型別一致

傳回結果參數中第一個非空的參數型別(switch函式,第2n+1個參數是傳回參數n>0)SWITCH表式中的結果型別必須相同
REVERSE一個bool型別參數(只能是true或者false,不能用0/1代替)boolREVERSE不符合(bool型別)的參數要求
||,&&參數為bool型別或數值型別bool

#符號#只能連結兩個布林型別為bool型別或數值型別的表式

4.5 資料集函式

函式/公式名
合法性說明
結果型別
不合法提示
SQL

三個或四個參

數前兩個參數為字元型別,後兩個為整數型態,後兩個參數可僅寫一個

任意型別#函式名#不符合(字元,字元,整數型態,整數型態)的參數要求
ROW無參數數字#函式名#不符合ROW(無參)要求
MAP

四個參數:前兩個參數是任意型別,第三、四個參數為數字或正文

任意型別#函式名#不符合(任意型別,任意型別,數字/正文,數字/正文)的參數要求

4.6 其他函式

函式 / 公式名
合法性說明
結果型別
不合法提示
ISNULL無參或單個任意型別參數boolISNULL不符合(無參)或(任意型別)的參數要求
NVL不限個數不限型別任意型別NVL不符合所有參數為相同型別的要求
INDEX不限參數型別和個數整數數值
EVAL不限型別數值
SEQ不限型別數值
UUID單個數值參數,可預設正文UUID不符合(無參) 或 (數值)的參數要求

4.7 陣列函式

函式 / 公式名
合法性說明
結果型別
不合法提示
ARRAY不限型別不限個數陣列
INARRAY兩個參數,第一個參數為任意型別,第二個參數為陣列型別數值INARRAY不符合 (任意型別,陣列)的參數要求
JOINARRAY兩個參數,第一個參數為陣列型別,第二個參數為任意型別陣列JOINARRAY不符合 (陣列,任意型別)的參數要求
INDEXOFARRAY兩個參數,第一個參數為陣列型別,第二個參數為數值型別任意型別INDEXOFARRAY不符合 (陣列,數值)的參數要求
||,&&參數為bool型別或數值型別bool

#符號#只能連結兩個布林型別為bool型別或數值型別的表式

5. 快速定位錯誤公式位置

  • FineReport 11.0.3 支援當多sheet、多報表塊的範本公式報錯時,公式報錯具體到儲存格所在sheet/報表塊

例如 cpt 範本「橫向擴展後某列資料佔比」sheet2 C1 儲存格只有=沒有其他內容,如下圖所示:

此時預覽範本,會出現如下報錯,公式報錯內容包括所在範本、sheet以及儲存格:

注:多 sheet 範本顯示公式報錯所在 sheet 為阿拉伯數字,從 0 開始;如果是 frm 範本,則顯示公式所在報表塊。

更多報錯說明如下所示:

公式日期格式錯誤導致計算中止錯誤代碼:11300301 日期格式有誤,公式計算中止
儲存格等號後公式內容為空錯誤代碼:11300302 儲存格等號後公式內容為空
公式中除數為零 

錯誤代碼:11300303 公式中除數為零:XX(具體儲存格)

公式計算錯誤錯誤代碼:11300310  公式計算錯誤:XX(具體儲存格),出錯內容:YY(具體原公式)

注:填報屬性內的公式、元件內的公式等在暫時不支援定位。

  • FineReport 11.0.3 設計器報錯日誌支援點選定位錯誤位置

為了更方便使用者快速定位到報錯儲存格,日誌面板中公式錯誤位置將「超連結樣式」顯示,點選後,如果報錯範本處於開啟狀態,將直接定位至超連結儲存格,多sheet及多報表塊範本將跳轉到對應sheet/報表塊,如下圖所示:

如果報錯範本未開啟則開啟範本並跳轉。

附件列表


主題: 報表專題
已經是第一篇
已經是最後一篇
  • 有幫助
  • 沒幫助
  • 只是瀏覽
  • 圖片不清晰
  • 用語看不懂
  • 功能說明看不懂
  • 操作說明太簡單
  • 內容有錯誤
中文(繁體)

文 檔回 饋

滑鼠選中內容,快速回饋問題

滑鼠選中存在疑惑的內容,即可快速回饋問題,我們將會跟進處理。

不再提示

10s後關閉