表復(fù)制粘貼全攻略:像操作Excel一樣批量錄入)
如果你在泛微OA E9里填過流程的明細(xì)表單下面這幕你一定不陌生Excel里明明已經(jīng)整理好了一張數(shù)據(jù)表幾十行、十幾個(gè)字段清清楚楚。切到OA流程單點(diǎn)開明細(xì)表卻只能一行一行手敲。填到一半眼花了、手抖了、瀏覽器崩了一切重來。這個(gè)場景幾乎每個(gè)用泛微做業(yè)務(wù)錄入的人都會撞上所以我一直覺得明細(xì)表能不能像Excel一樣復(fù)制粘貼直接決定了這套流程錄入效率的上限。這篇文章想聊的就是怎么在泛微E9的流程明細(xì)表里把復(fù)制粘貼這個(gè)能力真正用起來像操作Excel那樣批量填入數(shù)據(jù)。內(nèi)容適合三類人看天天幫業(yè)務(wù)部門錄單的OA專員被員工追著問為什么明細(xì)表不能復(fù)制的流程管理員以及自己手頭有大量Excel數(shù)據(jù)要往OA表單里搬的業(yè)務(wù)同事。我會從底層邏輯講起再給具體操作步驟最后把我踩過的坑和排查思路完整放出來照著做基本能解決九成的問題。1. 明細(xì)表錄入為什么這么痛E9的表單邏輯和Excel差在哪1.1 我處理過的一個(gè)真實(shí)表單之前幫一家制造企業(yè)配置采購申請流程明眼表單里有張明細(xì)表叫采購物料清單字段包括物料編碼、物料名稱、規(guī)格型號、數(shù)量、單位、單價(jià)、備注一共20多行起步。業(yè)務(wù)部門平時(shí)怎么錄從ERP導(dǎo)出一份Excel物料清單再手動一行行往OA里敲。一天下來光錄單據(jù)就占用了一整個(gè)上午。我接手之后做的第一件事不是培訓(xùn)員工怎么用系統(tǒng)而是先搞清楚一個(gè)最基本的問題泛微E9的明細(xì)表到底能不能接受外部粘貼數(shù)據(jù)。如果能它的規(guī)則是什么如果不能是哪里設(shè)了門檻。因?yàn)樗泻糜玫墓δ芮疤岫际悄愕孟让逅钠狻?.2 明細(xì)表不是Excel但骨子里是Excel的親戚熟悉泛微的人都知道流程單通常分兩塊主表字段和明細(xì)表字段。主表里放申請人、部門、申請事由這類一條記錄只有一個(gè)值的信息明細(xì)表則負(fù)責(zé)承載一對多的數(shù)據(jù)比如一張申請單下面掛20條物料。在后臺數(shù)據(jù)結(jié)構(gòu)里明細(xì)表其實(shí)對應(yīng)著一張獨(dú)立的邏輯表一行一條記錄。這和Excel的行列模型幾乎一樣一個(gè)字段就是Excel的一列一條明細(xì)就是Excel的一行。既然模型一樣復(fù)制粘貼這條路天然是通的只是前端交互規(guī)則需要摸。這也是很多同事問我明細(xì)表能不能像Excel一樣時(shí)我給出的第一個(gè)判斷能但不完全一樣你得按E9的規(guī)則來。1.3 先給像Excel一樣定個(gè)目標(biāo)我把像操作Excel一樣拆成三層需求這樣不容易跑偏需求一能把Excel里已經(jīng)排好的多行多列數(shù)據(jù)一次性粘進(jìn)明細(xì)表而不是逐行手輸。需求二能在明細(xì)表內(nèi)部復(fù)制某一行快速追加新行再小范圍改幾個(gè)值。需求三粘貼完之后能快速檢查、修正比如重新排序、清理空行、修正格式錯(cuò)誤。這篇文章的實(shí)操內(nèi)容基本就是圍繞這三層需求展開的。至于那些在OA里實(shí)現(xiàn)完整Excel公式計(jì)算跨表單聯(lián)動自動帶數(shù)之類的場景坦白說已經(jīng)超出了復(fù)制粘貼的范疇我會在最后提一嘴更合適的實(shí)現(xiàn)方式這里先不展開。2. 明細(xì)表復(fù)制粘貼的底層邏輯剪貼板規(guī)則和行列對齊2.1 瀏覽器剪貼板到底在傳什么很多人在E9明細(xì)表里粘貼失敗第一反應(yīng)是系統(tǒng)不支持這個(gè)功能其實(shí)多數(shù)情況是沒弄明白瀏覽器剪貼板的傳輸規(guī)則。當(dāng)你在Excel里框選一片區(qū)域按下CtrlC系統(tǒng)復(fù)制的可不只是表面看到的文字而是一個(gè)帶行列結(jié)構(gòu)的內(nèi)存對象。瀏覽器拿到這個(gè)對象后會嘗試把它轉(zhuǎn)成帶格式信息的表格數(shù)據(jù)。粘貼時(shí)換行符代表行結(jié)束Tab制表符代表列結(jié)束。換句話說Excel里的一行粘貼到明細(xì)表瀏覽器會拆成若干個(gè)單元格值再按順序填進(jìn)明細(xì)行的各個(gè)字段。這就是為什么我反復(fù)強(qiáng)調(diào)源數(shù)據(jù)里不要有合并單元格不要有肉眼可見的換行不要在單元格里塞Tab。你復(fù)制進(jìn)去的是20行數(shù)據(jù)但Excel單元格里如果含有換行符粘貼到明細(xì)表時(shí)可能被攔腰截?cái)嘤采鸪鰩资袛?shù)據(jù)來看起來就像粘貼亂套了。2.2 E9的行列對齊規(guī)則那粘貼進(jìn)E9明細(xì)表后數(shù)據(jù)具體是往哪兒去以我這幾年摸索下來的結(jié)論E9執(zhí)行的基本規(guī)則是Excel的第一行對應(yīng)明細(xì)表光標(biāo)所在的那一行Excel的第一列對應(yīng)明細(xì)表當(dāng)前可編輯字段中的第一個(gè)字段之后的每一列按照明細(xì)表字段順序依次向后對齊。這里有個(gè)特別容易踩的坑明細(xì)表字段在數(shù)據(jù)庫里的排列順序未必等于你屏幕上看到的列順序。你在界面上看到的物料編碼、物料名稱、規(guī)格型號三列后臺字段順序可能把備注排在第二位。一旦順序?qū)Σ簧险迟N結(jié)果就是張冠李戴物料名稱跑進(jìn)規(guī)格型號里。所以我的習(xí)慣是真正大批量粘貼之前先在明細(xì)表設(shè)計(jì)器里核對一遍字段順序或者拿一行數(shù)據(jù)先試貼一次確認(rèn)列對齊后再全量操作。這個(gè)習(xí)慣幫我省了無數(shù)返工的時(shí)間。2.3 明細(xì)表內(nèi)部的復(fù)制粘貼和Excel的區(qū)別明細(xì)表內(nèi)部復(fù)制也有區(qū)別。Excel里你可以隨便復(fù)制某個(gè)單元格再粘貼到任意地方但E9明細(xì)表里復(fù)制操作多數(shù)是基于整行或者整塊區(qū)域的你選中A行幾個(gè)單元格CtrlC后再點(diǎn)新增一行粘貼過去的是這一行的完整字段集合而不是只粘你選中的幾個(gè)格子。另外Excel里CtrlZ可以撤銷單元格級別的修改E9明細(xì)表的撤銷通常只能撤銷行級操作比如刪除行、插入行。行內(nèi)某個(gè)單元格填錯(cuò)值想撤銷回粘貼前的狀態(tài)多半只能手動改或者重新粘貼一次。這個(gè)差異我建議所有人心里有數(shù)避免操作失誤后還滿屏找撤銷按鈕。3. 四種最高頻的復(fù)制粘貼場景和標(biāo)準(zhǔn)操作3.1 場景一整張Excel表一次性填入明細(xì)表這是最剛需的場景把Excel里20行物料清單整體搬進(jìn)OA明細(xì)表。標(biāo)準(zhǔn)流程如下回到Excel先處理源數(shù)據(jù)。刪掉表頭行只保留數(shù)據(jù)區(qū)域有合并單元格的先取消合并日期列全部轉(zhuǎn)成YYYY-MM-DD文本格式數(shù)字列確認(rèn)不是文本型數(shù)字??蜻x數(shù)據(jù)區(qū)域注意是框選實(shí)際數(shù)據(jù)區(qū)域不要選整列。選整列會把后面幾萬個(gè)空行一起復(fù)制進(jìn)去粘貼時(shí)要么卡死要么產(chǎn)生大量空白明細(xì)行。CtrlC復(fù)制。切到E9流程單先點(diǎn)擊明細(xì)表區(qū)域的第一個(gè)可編輯單元格確認(rèn)光標(biāo)在明細(xì)表內(nèi)部。CtrlV粘貼瀏覽器會自動創(chuàng)建多行明細(xì)并填入數(shù)據(jù)。逐行核對尤其核對日期、下拉框值、金額這類容易變形的字段。實(shí)測下來一次性粘貼幾十行數(shù)據(jù)問題不大。但如果行數(shù)特別大比如超過一兩百行我建議還是分批粘貼或者改用下一章會提到的Excel模板導(dǎo)入功能。瀏覽器在渲染超大明細(xì)區(qū)域時(shí)會有明顯卡頓別硬來。3.2 場景二明細(xì)表內(nèi)部整行復(fù)制追加有時(shí)候不是在外部Excel里有數(shù)據(jù)而是已經(jīng)錄好的明細(xì)里有幾行內(nèi)容極其相似只需微調(diào)一個(gè)字段比如同一個(gè)供應(yīng)商下的多批次物料規(guī)格一樣、數(shù)量不同。操作方法是選中明細(xì)表中某一行CtrlC復(fù)制然后點(diǎn)擊明細(xì)表里的新增行按鈕新行生成后選中新行區(qū)域CtrlV粘貼。粘貼完成后把需要調(diào)整的字段手動改掉。需要注意的無非兩點(diǎn)一是帶有自動序號的明細(xì)表復(fù)制過去后序號可能不會自動重排得手動維護(hù)二是如果明細(xì)表設(shè)置了字段唯一性校驗(yàn)或必填校驗(yàn)復(fù)制出的新行可能會觸發(fā)提示這時(shí)別慌按提示補(bǔ)全對應(yīng)字段就能保存。3.3 場景三把一列Excel數(shù)據(jù)批量填到明細(xì)表某個(gè)字段還有一種高頻需求明細(xì)表本身已經(jīng)有基礎(chǔ)行只是需要把某個(gè)字段統(tǒng)一更新為Excel里的一列值。比如客戶給了20個(gè)訂單號要讓明細(xì)表里的關(guān)聯(lián)訂單號字段按行對應(yīng)填入。做法同樣簡單在Excel里復(fù)制這一列數(shù)據(jù)注意只復(fù)制這一列、不要帶表頭切到明細(xì)表點(diǎn)擊目標(biāo)字段列的第一個(gè)輸入框保證光標(biāo)落在正確行CtrlV粘貼。粘貼后E9會按行順序把這一列數(shù)據(jù)依次填入目標(biāo)字段源數(shù)據(jù)有多少行就覆蓋多少行。這里有個(gè)特別關(guān)鍵的點(diǎn)如果光標(biāo)沒有落在目標(biāo)列的第一行而是落在第三行那Excel的第1行數(shù)據(jù)會從明細(xì)表的第3行開始填前面的行不會被改動。很多人以為粘貼會自動找到空位實(shí)際上不會它只會從光標(biāo)當(dāng)前位置開始老老實(shí)實(shí)按行覆蓋。3.4 場景四粘貼后的收尾動作粘貼只是錄入流程的一半另一半是收尾檢查。我一般按下面三步走先查行數(shù)是否對。明細(xì)表右下角或編輯工具欄一般會顯示當(dāng)前行數(shù)和Excel原數(shù)據(jù)行數(shù)對不上說明中間有多行粘貼失敗或產(chǎn)生了空行。再查序號列。如果明細(xì)表設(shè)計(jì)時(shí)用了物理序號字段粘貼不會自動重排序號要么手動改要么提交后讓流程腳本統(tǒng)一重排序號。最后點(diǎn)開幾條明細(xì)行逐字段確認(rèn)。重點(diǎn)看下拉框字段有沒有被清空日期字段有沒有變成一串?dāng)?shù)字?jǐn)?shù)字列有沒有出現(xiàn)科學(xué)計(jì)數(shù)法。這三個(gè)收尾動作花不了兩分鐘但能保命。4. 復(fù)制粘貼沒反應(yīng)/失效的完整排查鏈路4.1 第一步先確認(rèn)不是瀏覽器模式在坑你我用E9的經(jīng)驗(yàn)是它的前端對Chrome內(nèi)核兼容性最好。如果你用的是某些瀏覽器頁面默認(rèn)跑在兼容模式IE內(nèi)核下明細(xì)表的剪貼板事件經(jīng)常會失效表現(xiàn)就是CtrlV按下去毫無反應(yīng)。排查方式是看看當(dāng)前頁面地址欄附近有沒有極速/兼容模式的切換按鈕切到極速模式后強(qiáng)制刷新頁面再試一次粘貼。我自己處理過的絕大多數(shù)粘貼沒反應(yīng)工單最后都是這個(gè)問題瀏覽器一換立竿見影。另外瀏覽器自動彈出的權(quán)限提示也值得看一眼。有些單位環(huán)境里瀏覽器攔截了頁面的剪貼板讀取權(quán)限明細(xì)表拿不到剪貼板內(nèi)容同樣會粘貼失敗。在瀏覽器地址欄右側(cè)找到權(quán)限設(shè)置允許該站點(diǎn)訪問剪貼板問題基本能解決。4.2 第二步檢查焦點(diǎn)是不是真的落在明細(xì)表內(nèi)部這個(gè)坑我踩過太多次了。E9流程單頁面里主表字段在前明細(xì)表在后鼠標(biāo)隨便一點(diǎn)焦點(diǎn)很容易還停在主表某個(gè)輸入框里。這時(shí)直接CtrlVExcel數(shù)據(jù)會粘進(jìn)主表那個(gè)輸入框或者干脆粘不進(jìn)去在頁面上看不出任何變化。正確做法是粘貼前先明明確確點(diǎn)一下明細(xì)表區(qū)域內(nèi)的單元格讓光標(biāo)出現(xiàn)在明細(xì)表里然后再CtrlV。判斷標(biāo)準(zhǔn)很簡單粘貼前看你屏幕上有沒有一個(gè)閃爍的文本光標(biāo)在明細(xì)表內(nèi)沒有就不動手。4.3 第三步排除字段只讀和控件類型的影響明細(xì)表里的字段并不是每個(gè)都能接受粘貼。常見兩類坑一類是只讀字段比如系統(tǒng)自動帶出的創(chuàng)建人提交時(shí)間這類字段在表單設(shè)計(jì)里設(shè)了只讀外部數(shù)據(jù)根本進(jìn)不去另一類是特殊控件比如下拉框、瀏覽按鈕、部門選擇器它們的值需要觸發(fā)特定事件才能寫入直接粘貼外部文本往往無效或者被靜默忽略。如果你必須貼的字段屬于這兩類我的建議是改方案要么調(diào)整表單設(shè)計(jì)把這些字段改成普通文本框或數(shù)字框要么放棄前端粘貼交給后端腳本在保存/審批節(jié)點(diǎn)批量賦值。具體怎么寫腳本下一節(jié)會展開。4.4 第四步復(fù)盤源數(shù)據(jù)的格式問題前端操作一切正常但粘貼出來的數(shù)據(jù)是亂的這時(shí)候九成是源數(shù)據(jù)格式問題。最常見的幾個(gè)表現(xiàn)和原因我整理過一張對照表。現(xiàn)象大概率原因處理辦法粘貼后多出大量空行Excel里選中了整列復(fù)制帶入了空白單元格每次只框選數(shù)據(jù)區(qū)域不要選整列日期顯示為數(shù)字比如46921Excel日期單元格底層是序列數(shù)把日期列轉(zhuǎn)成文本格式或先用公式轉(zhuǎn)成字符串文本里的換行變成多行明細(xì)源單元格內(nèi)有AltEnter換行符把單元格內(nèi)容里的換行符批量清理掉金額變成科學(xué)計(jì)數(shù)法源列是文本型數(shù)字或超長數(shù)字先設(shè)為數(shù)字格式保留兩位小數(shù)后再復(fù)制下拉框值粘貼后為空粘貼文本不在選項(xiàng)列表里先改下拉框選項(xiàng)或改用普通文本框字段源數(shù)據(jù)處理這一步建議都在Excel里完成別指望粘貼進(jìn)OA后再改。瀏覽器對剪貼板內(nèi)容的解析是機(jī)械的源數(shù)據(jù)越規(guī)整粘貼結(jié)果越可控。4.5 一個(gè)直接的排查對照表如果你到了現(xiàn)場還是一頭霧水按這張表從上到下過一遍基本能定位排查項(xiàng)判斷方法解決辦法瀏覽器模式看頁面是否有極速/兼容切換按鈕切極速模式刷新頁面剪貼板權(quán)限看地址欄右側(cè)權(quán)限提示允許站點(diǎn)訪問剪貼板焦點(diǎn)位置明細(xì)表內(nèi)是否有閃爍光標(biāo)點(diǎn)擊明細(xì)表可編輯單元格后再粘貼行數(shù)上限明細(xì)表最大行數(shù)設(shè)置是否允許新增這么多行減批量條數(shù)或調(diào)大明細(xì)表行數(shù)上限字段可編輯性字段是否為只讀調(diào)整表單設(shè)計(jì)或改用腳本賦值控件類型下拉框/瀏覽按鈕是否直接粘貼改字段類型或后端寫入源數(shù)據(jù)格式日期、數(shù)字、合并單元格、換行符在Excel里先清洗再復(fù)制說實(shí)話我自己項(xiàng)目的實(shí)施經(jīng)驗(yàn)是每次粘貼失敗先別急著懷疑E9這功能不行先從瀏覽器模式開始排查80%的問題出在那兒。5. 再進(jìn)一步模板導(dǎo)入和后端腳本寫入5.1 什么情況該用E9自帶的Excel導(dǎo)入導(dǎo)出直接粘貼適合幾十行的輕量數(shù)據(jù)但如果你手里是幾百上千行的數(shù)據(jù)比如年度資產(chǎn)盤點(diǎn)清單、批量客戶導(dǎo)入我不推薦硬貼。頁面會卡到懷疑人生而且粘完還要考慮分頁加載、保存超時(shí)的問題。這種情況用E9的明細(xì)表Excel導(dǎo)入功能更穩(wěn)。流程表單設(shè)計(jì)時(shí)或者流程詳情頁的操作欄里一般都有導(dǎo)入Excel入口。系統(tǒng)會先讓你下載一個(gè)標(biāo)準(zhǔn)模板模板里已經(jīng)按明細(xì)表的字段順序建好了列頭。你需要做的就是把Excel數(shù)據(jù)復(fù)制到模板里、填好必填列然后上傳。導(dǎo)入過程系統(tǒng)會做字段校驗(yàn)、必填校驗(yàn)比前端粘貼多了一層保護(hù)。但代價(jià)是受約束模板列不能隨意增刪改字段順序不能隨便調(diào)整某些特殊控件字段可能根本不出現(xiàn)在導(dǎo)入模板里。實(shí)際操作中我一般把行數(shù)小于50、列結(jié)構(gòu)簡單、臨時(shí)性數(shù)據(jù)交給粘貼行數(shù)多、表結(jié)構(gòu)復(fù)雜、需要反復(fù)錄入的交給模板導(dǎo)入。兩種手段配合著來效率最高。5.2 用Ecode腳本在流程節(jié)點(diǎn)里自動寫明細(xì)比模板導(dǎo)入更進(jìn)階的是寫腳本。當(dāng)明細(xì)表的數(shù)據(jù)不是來自人工Excel而是來自某個(gè)業(yè)務(wù)系統(tǒng)、數(shù)據(jù)庫表、或者主表字段拆分時(shí)就應(yīng)該用泛微E9的Ecode后端腳本來自動生成明細(xì)行。舉個(gè)例子某個(gè)流程提交時(shí)要根據(jù)主表輸入的客戶編號自動帶出該客戶名下的所有關(guān)聯(lián)聯(lián)系人寫進(jìn)明細(xì)表。前端復(fù)制粘貼做不了這種動態(tài)生成腳本可以。Ecode里操作明細(xì)表常規(guī)思路是先加載文檔對象然后定位到對應(yīng)的明細(xì)表逐行寫入字段值參考代碼如下// 偽代碼示意實(shí)際表名和字段ID需要按你的表單定義替換 Document doc new Document(); doc.setFormid(123); // 表單ID doc.setDocid(456); // 當(dāng)前流程文檔ID doc.load(); int insertRow 0; for (DataRow row : sourceDataList) { doc.insertSheetRow(detailTableName, insertRow); // 明細(xì)表標(biāo)識 doc.setSheetCellValue(detailTableName, insertRow, field1, row.get(物料編碼)); doc.setSheetCellValue(detailTableName, insertRow, field2, row.get(物料名稱)); insertRow; } doc.save();腳本的價(jià)值在于可以從主表字段取值可以查數(shù)據(jù)庫或調(diào)用外部接口可以循環(huán)批量生成明細(xì)而且不受瀏覽器剪貼板和前端控件限制。唯一的門檻是需要一定的Java基礎(chǔ)以及泛微Ecode環(huán)境里能跑通對應(yīng)API。如果你不是開發(fā)角色這一節(jié)當(dāng)個(gè)了解就好真要用到的時(shí)候找IT同事幫忙寫會比較順。5.3 三種方式怎么選我按自己的項(xiàng)目經(jīng)驗(yàn)給一個(gè)選型參考方式適用場景優(yōu)點(diǎn)代價(jià)前端直接粘貼50行以內(nèi)、字段簡單、臨時(shí)數(shù)據(jù)快、零成本依賴瀏覽器、受控件類型限制Excel模板導(dǎo)入幾百上千行、批量重復(fù)錄入穩(wěn)定、有校驗(yàn)需下載模板、列順序嚴(yán)格Ecode腳本批量寫入數(shù)據(jù)來自系統(tǒng)自動帶出、需重復(fù)執(zhí)行完全自動、不依賴人工需要開發(fā)能力、調(diào)試成本高這個(gè)三角關(guān)系記清楚能幫你避免很多用一個(gè)不合適的工具干另一種活的尷尬。6. 寫在最后的操作習(xí)慣最后分享幾個(gè)我一直在用的實(shí)操習(xí)慣也是我被坑了無數(shù)次之后總結(jié)出來的第一任何批量粘貼操作前先在Excel里把數(shù)據(jù)清洗一遍。該去的合并單元格去掉該轉(zhuǎn)的文本格式轉(zhuǎn)了該刪的空行刪干凈。源數(shù)據(jù)干凈粘貼成功率直接提升一個(gè)等級。第二列順序一定要提前對齊。我一般會準(zhǔn)備一張對照表把Excel列名和E9明細(xì)表字段一一對應(yīng)起來粘貼前掃一眼避免張冠李戴。第三大操作之前先拿一行數(shù)據(jù)試貼。用一個(gè)最小測試集驗(yàn)證對齊規(guī)則和字段類型都沒問題再全量粘貼。成本極低收益極高。第四學(xué)會給自己留備份。粘貼前如果明細(xì)表里已經(jīng)有數(shù)據(jù)先導(dǎo)出Excel備份一份萬一粘錯(cuò)還有退路。說到底讓E9明細(xì)表像操作Excel一樣并不是一句口號而是有方法、有規(guī)則的。摸清剪貼板邏輯、按對齊規(guī)則操作、學(xué)會排查失效原因這套組合拳打下來錄單效率翻倍是完全可以實(shí)現(xiàn)的。你可以先從一次只有三五行的最小粘貼開始把規(guī)則跑通再逐步推到大批量場景。