對於行式填報表的線上匯入Excel,在6.5.5之前版本前需要和Excel資料複製到填報單元格一樣,在匯入Excel前手動增加足夠的行數才能進行匯入;
從7.0版本開始,FR對此功能進行了改進,在匯入Excel時,會根據Excel中的記錄數自動擴展出需要的行數,下面就通過FineReport圖表來介紹一下。
工具/原料
FineReport圖表7.1.1
大小:148.2M 適用平臺:windows/linux
根據標題匹配
模板準備
開啟模板%FR_HOME%\WebReport\WEB-INF\reportlets\doc\SpecialSubject \ExcelImport\ExcelImport_1.cpt,修改如下圖,刪除左方和下方的空白行,將產品名稱和類別列名稱修改為產品和類別ID,與excel不一樣,同時更換類別和供應商列的位置,再為每個單元格新增控制元件,這裡新增文字控制元件:
注:如果不想新增控制元件,可以設定不按照控制元件匯入,但是這裡是匯入不定行,不論是否根據控制元件匯入,必須保證左父格是可擴充套件的。
報表填報屬性修改
修改報表填報屬性中列和資料庫中列的對應,這裡只需要修改類別ID對應的值,修改為map(C2, "ds2", 2, 1)。
效果檢視
點選填報預覽,在web端單擊工具欄上的匯入Excel按鈕,選擇excelimport.xls,可看到如下圖效果:
不根據標題匹配
FineReport Excel匯入不定行預設首先要根據標題匹配,如果標題能夠匹配2個或2個以上,則無需再執行根據位置匹配,但是如果在匯入資料的時候希望根據位置匹配,但是標題又能匹配2個或2個以上,此時,如果使用預設設定,將無法根據位置匹配。
那麼,我們可以通過修改配置檔案,關閉使用標題匹配這個功能,即直接使用位置匹配。
配置檔案準備
開啟%FR_HOME%\WebReport\WEB-INF\resources下面的customconfig.xml檔案,如果沒有該檔案,則複製config.xml至該資料夾中,並重命名為customconfig.xml,如下圖:
修改配置檔案
開啟該檔案,在如下位置處新增一行
根據位置匹配
描述
Excel匯入行式報表根據位置匹配是指,Excel匯入進來的時候需要匯入資料的單元格從第幾行第幾列開始,那麼Excel中資料就從第幾行第幾列開始,無關於標題名稱,只跟位置有關係。
如下圖,可以看到Excel中的列標題與FineReport模板的列標題完全不一致,但是位置卻保持一致,FineReport模板中匯入資料的單元格從B3開始,那麼匯入Excel中,從B3開始的資料就被導進來了:
注:行式報表根據位置匹配的前提是標題完全匹配不上,如果有2個或2個以上標題能匹配得上,那麼就會使用根據標題匹配,但是如果通過配置檔案設定了不執行根據標題匹配,那麼就會直接執行根據位置匹配。
模板準備
上圖中我們可以看到,Excel中第一行資料(不包括標題)在B3~K3中,在填報模板中,匯入資料的單元格也要在B3~K3,單元格從上到下擴充套件,並新增控制元件:
注:若匯入的報表中不是空白的填報表,而是有取數的功能,則需要將報表的最左父格設定為列表顯示。
報表填報屬性設定
在報表填報屬性中,只需要將第一行單元格與資料表的資料列進行繫結即可。
該例中,Excel中的原始資料供應商和類別都是具體的名字,若使用者希望Excel匯入的是名字,但實際入庫的是ID怎麼辦呢?
此時可以在報表填報屬性中使用map函式轉換,以下具體介紹。
定義map函式需要的資料集
增加資料集ds1,SQL語句為:SELECT * FROM [供應商],查詢出供應商ID與供應商名字的對應關係;
再增加資料集ds2,SQL語句為:SELECT * FROM [產品類別],查詢出產品類別ID與類別名字的對應關係。
報表填報屬性中使用map函式
Excel匯入的是名字,使用map函式轉換,如下圖
填報工具欄設定
預設填報工具欄是沒有匯入Excel按鈕的,點選模板>模板web屬性>填報頁面設定,為該模板單獨設定,勾選使用工具欄,為該報表單獨設定工具欄,清空工具欄,然後在按鈕面板中雙擊提交按鈕和匯入excel按鈕,將這兩個按鈕新增到頂部工具欄中,如下圖:
Excel匯入固定行
描述
Excel匯入固定行就是指FineReport模板匯入資料單元格是不可擴充套件的,匯入的Excel行數與模板中設定的匯入資料的單元格行數一致,如下圖:
模板準備
開啟模板%FR_HOME%\WebReport\WEB-INF\reportlets\doc\SpecialSubject \ExcelImport\ExcelImport_1.cpt,修改如下圖,設定B3單元格不可擴充套件,並複製第3行,貼上四遍,使第4行至第7行與第3行一模一樣:
填報工具欄設定
預設填報工具欄是沒有匯入Excel按鈕的,點選模板>模板web屬性>填報頁面設定,為該模板單獨設定,勾選使用工具欄,為該報表單獨設定工具欄,清空工具欄,然後在按鈕面板中雙擊提交按鈕和匯入excel按鈕,將這兩個按鈕新增到頂部工具欄中,如下圖:
匯入Excel
儲存模板,點選填報預覽,在web端開啟模板,點選匯入Excel,選擇excelimport.xls,可以看到只匯入了5行資料,如下圖:
Excel雙向匯入
描述
Excel雙向匯入是指標題行列是從單元格擴充套件得到的,並將匯入資料的單元格也是可擴充套件的,如下圖所示效果,標題欄位通過橫向擴充套件得到,匯入資料的單元格縱向擴充套件,匯入不定行資料:
Excel雙向匯入模板在web端填報預覽開啟之後,其展示效果與固定標題行匯入不定行是一樣的,那麼雙向匯入的邏輯仍然是首先根據標題匹配,如果標題匹配不上或者只有一個可以匹配上或者設定了不執行根據標題匹配,則執行根據位置匹配。
模板準備
新建一個模板,新增內建資料集,該資料集中只有一列資料,儲存的是產品表中的欄位名稱,如下圖:
內建資料集準備好之後,將欄位名稱資料列拖曳到A2單元格中,設定為橫向擴充套件,並將A3單元格設定為縱向擴充套件,如下圖:
工具欄設定
預設填報工具欄是沒有匯入Excel按鈕的,點選模板>模板web屬性>填報頁面設定,為該模板單獨設定,勾選使用工具欄,為該報表單獨設定工具欄,清空工具欄,然後在按鈕面板中雙擊提交按鈕和匯入excel按鈕,將這兩個按鈕新增到頂部工具欄中,與根據位置匹配示例中的設定相同。
配置檔案修改
FineReport預設不開啟雙向匯入,故,如果要使用雙向匯入,首先要先修改配置檔案,使其開啟雙向匯入。
開啟%FR_HOME%\WebReport\WEB-INF\resources下面的customconfig.xml檔案,如果沒有該檔案,則複製config.xml至該資料夾中,並重命名為customconfig.xml,如下圖:
在customconfig.xml檔案最後面的標籤之前插入
Excel匯入
點選填報預覽按鈕,在web端預覽報表,可以看到標題欄位是擴展出來的,點選工具欄上的匯入Excel按鈕,選擇excelimport.xls,可以看到如下圖所示效果:
Excel匯入錯位
問題描述
同一張模板,通過原樣匯出至Excel中,再重新整理模板匯入該Excel的時候,發現匯入錯位的問題,如下圖所示:
解決思路
這是因為FineReport在7.1版本中新增了一個雙向匯入的功能,即Excel雙向匯入,其處理邏輯發生了變化,並對模板中合併的單元格進行了處理,導致匯入錯亂的情況出現,那麼此時只需要在模板中匯出隱藏行列,並使在匯入Excel的時候,不使用雙向匯入,即在配置檔案中關閉雙向匯入(雙向匯入預設關閉的,如果開啟了需要關閉)即可。
模板準備
如上效果圖所示,準備如下圖所示的模板:
引數面板中有2個引數:starttime和endtime,其中開始日期的預設值為:DATEDELTA(today(), if(tointeger(WEEKDAY($Date)) == 0, -6, 1 - WEEKDAY($Date))),結束日期的預設值為:DATEDELTA(today(), if(tointeger(WEEKDAY($Date)) == 0, 0, 7 - WEEKDAY($Date)))。
DATEDELTA()等函式的具體含義請檢視日期常用處理函式。
合併B3和C3單元格,其值為:=range($starttime, $endtime),合併D3和E3單元格,其值為WEEKDAY(B3),合併F3和G3單元格,設定其控制元件型別為文字控制元件。
注:模板中要出現合併的單元格。
匯出Excel
儲存模板,點選填報預覽,在web端開啟該模板,並輸入值班人欄位值,如下圖,輸入完成之後,點選工具欄上的輸出>Excel>原樣匯出,如下圖:
此時,就會匯出如上圖所示的Excel。
匯入Excel
回到設計器介面,根據匯入行式報表中的操作步驟,為該模板的工具欄新增匯入Excel按鈕,新增完成之後,重新填報預覽該模板,點選匯入Excel,選擇剛剛匯出的Excel檔案,即可看到如下圖所示效果,位置錯亂:
匯出隱藏行列
回到設計器,點選模板匯出屬性,勾選匯出隱藏行和匯出隱藏列,如下圖:
結果檢視
此時再重新匯出Excel,匯入Excel,就可以看到位置不會發生錯亂了。