時我們在使用Excel制作表格的時候,經常會遇到由于文本內容較多,導致這些內容無法在一個單元格中完全顯示。常規的方法是將單元格設置為“自動換行”,但是這樣會影響整個文件的美觀。下例是某小區的入住登記數據,備注一欄的內容較多,如果使用常規的自動換行,表格美觀度顯然較差(圖1)。現在我們可以有更好的方法實現文本顯示,而且并不會影響表格的美觀度。
圖1 自動換行設置導致表格不美觀
借力VBA自動滾動顯示
上述示例中的備注欄文本顯示,我們可以借助VBA將其設置為滾動顯示,效果類似很多門店上的LED顯示屏,這樣文本在單元格中會自動滾動。
點擊“開發工具→Visual Bisic”,在打開的VB設計窗口中點擊“插入→模塊”,接著到https://dwz.cn/iCjz8vx8(提取碼: etmw)下載所需的代碼文件,下載后將其中的代碼粘貼到右側的代碼窗口中并保存(圖2)。
圖2 輸入代碼
這里代碼的作用實際上是建立一個標簽,利用VBA腳本調整單元格內文字的左右邊距,當邊距等于文字長度時重復循環,這樣就可以實現文本左右自動滾動了。代碼中默認文本在D1單元格中顯示,大家可以根據自己的實際需要進行更改。
返回Excel窗口,取消D1單元格的自動換行顯示,將其行距調整到和其他單元格一致。接下來點擊“開發工具→宏”,就可以看到這里新增了兩個宏,其中“滾動顯示”是執行文本的左右滾動顯示,另一個則是停止滾動(圖3)。
圖3 查看宏
為了方便操作,選中“滾動顯示”,點擊“選項”,為其設置一個快捷鍵Ctrl+W。同樣選中另一個宏,為其設置快捷鍵Ctrl+S(圖4)。
圖4 設置快捷鍵
以后如果要滾動顯示上述文本,我們只要按下Ctrl+W就可以讓D1的文本自動滾動顯示。為了加強顯示效果,還可以將單元格的底色設置為黑色,將文本設置為白色,這樣的效果就類似LED顯示屏了(圖5)。
圖5顯示效果
插入控件實現水平滾動顯示
上述方法是使用VBA腳本實現的,操作比較復雜,對其實于新手還可以使用插入滾動條的方法手動顯示文本數據。
定位到D1單元格,點擊“開發工具→插入→ActiveX控件→文本框控件”,在D1單元格上插入一個文本框控件(圖6)。
圖6 插入控件
選中插入的控件,在文本框控件上點擊右鍵選擇“屬性”,在打開的屬性設置窗口中,將“MultiLine”(即是否開啟文本框的自動換行)屬性設置為“True”。繼續更改“ScrollBars”屬性為“2-fmScrollBarsVertical”,即縱向滾動條(圖7)。
圖7 更改屬性
小提示:
如果將“scrollbars”的屬性值設置為1,則為水平滾動條,我們可以根據自己的實際需要進行設置。
完成上述操作后返回Excel,將文本框的大小調整為和D1單元格大小一致,接著點擊“設計模式”退出設計。現在在上述文本框中輸入內容“備注:這里入住時間以戶主在本小區登記為準”,就可以看到文本框中會自動出現上下滾動條,點擊滾動條即可顯示單元格中的所有內容了(圖8)。
圖8 文本框控件上下滾動顯示
表頭數據跨列居中顯示
如果較多文本內容是表頭數據,常規的方法是使用合并居中顯示。由于合并單元格會給后續數據的統計和排序帶來麻煩,所以對于這類表頭數據其實可以借助跨列居中的方法來實現,這樣既不用合并單元格,又可以完整顯示表頭的內容。
首先選中A1~E1單元格,右擊選擇“設置單元格格式”,接著切換到“對齊”標簽,在水平對齊方式下選擇“跨列居中”(圖9)。
圖9 設置單元格格式
返回Excel窗口,就可以看到原來在A1中的文本內容變為跨列居中顯示了,這樣不僅可以完整顯示文本內容,而且由于沒有合并單元格,對于后續的篩選、排序操作也不會有任何影響(圖10)。
圖10 跨列居中顯示所有文本
創作者: 盧子 轉自:Excel不加班
要生成30個日報表,估計你是一個個操作,移動復制重命名,改了大半天。有了VBA以后,就可瞬間生成,點一下按鈕全搞定。
其實,實際工作中,很多東西都可以靠VBA生成的。VBA并不遙遠,而是與你的工作息息相關。
你也不要把VBA想得太復雜,跟著盧子學習就行,其他別想。
還是老套路,用最原始的方法操作,先錄制宏,再慢慢改代碼完善。
Step 01 錄制一個宏,將模板移動或復制,移至最后,勾選建立副本。
Step 02 點VB進入后臺,再點模塊,就可以看到剛剛錄制的宏。
Sheets("模板").Select 選擇模板這個工作表。
中間那句不用管,沒啥意義。
Sheets("模板").Copy After:=Sheets(1) 將模板復制到第1個工作表后面。Copy復制,After之后,即使不會英語,你都可以大概猜出意思。
現在要實現的效果就是,每復制一次,都在最后工作表的后面創建一個新表。第1次就在表1后面,第2次就在表2后面,第3次就在表3后面。
前面學了循環語句,你可能想到通過i這個變量來實現,其實還有一個更智能的。Sheets.count就是計算工作表的個數。
現在語句就改成Sheets("模板").Copy After:=Sheets(Sheets.Count)。
生成新表的同時對該表進行命名,Sheets.Name就是工作表的名稱,名稱依次等于1日、2日、3日……此時通過For Next循環,讓i變量隨著循環次數變更來實現。
Sheets(Sheets.Count).Name = i & "日"
將剛剛說的內容綜合起來代碼就出來了。
還有一個小問題,就是在每個表的A2生成日期。
Sheets.Range代表某個表的單元格,日期前面部分是固定的為 "2020/6/" 再連接變量i就可以。
Sheets(Sheets.Count).Range("a2") = "2020/6/" & i
到此,完整的代碼就出來了。
Sub rb()
Dim i As Integer
For i = 1 To 30
Sheets("模板").Select
Sheets("模板").Copy After:=Sheets(Sheets.Count)
Sheets(Sheets.Count).Name = i & "日"
Sheets(Sheets.Count).Range("a2") = "2020/6/" & i
Next
End Sub
查 發自 凹非寺
量子位 報道 | 公眾號 QbitAI
編程不是人人都會,但Excel電子表格就是當代白領的必備技能啊!如果用Excel實現圖像生成,那豈不是。。。
最近還真有人發明了一種SpaceSheet工具,它就是簡單的電子表格界面,即使你完全不會編寫代碼,也能借助它理解生成對抗網絡(GAN)是如何制造圖像的。
作者把它設計成了一個網頁Demo,供用戶直接訪問:
https://vusd.github.io/spacesheet/
SpaceSheet應用程序由兩部分組成:
左側是數據選擇器,右側是電子表格界面。
以生成面部圖像為例。在右側的表格個中選中某個位置,再點擊點擊左側的元素來選擇人臉。
通過電子表格頂的按鈕,可以對填入的人臉進行以下一系列操作。
面部特征的連續變化
通過線性插值(Linear interpolation,LERP),可以按一個值到另一個值的的“距離”,等間距地插入一些圖片。
頂部操作欄中的LERP按鈕使可以在電子表格中的選定單元格之間進行線性插值。
通過線性插值的方法,產生兩張人臉之間的平滑過渡圖像,可以幫助我們理解面部特征的連續過程:
它不僅支持一維插值,還只支持二維插值。指定四個頂點,可以形成一個插值的“矩陣”,展示4張面部圖片之間的連續變化:
另外,除了在兩個面部圖像的“中點”插值,還能通過滑動條(SLIDER)調節偏移的量。
如果說前面的線性插值是離散的,那么滑動條就給我們提供了一種連續變化的圖像。它與兩張已知圖像之間“差異”是人為可控的。
提取“金發”屬性
這套應用程序還可以分離出人臉中的“屬性向量”(Attribute Vectors),
何謂屬性向量?以人的面部特征為例。
首先,選擇一個黑發的人臉,再選擇一個金發的人臉。對二者求差(MINUS),這個差值就是“金發”特征,于是我們獲得了一個金發的屬性向量。
獲得了這個屬性向量后,我們就可以通過求和操作(SUM)給任何人加上金發了:
同樣的,我們也可以給人減去(MINUS)屬性向量,獲得一個黑發的面部圖像:
其他基本操作
除了以上幾項操作外,我們還能對面部圖像求“距離”、求“乘積”等。
面部圖像明明是一張圖片,為何能做加減法、求距離呢?
這就不得不提潛在空間,每張面部圖像都是在這個空間中的一個個向量,我們當然可以對這些向量做四則運算。運算的結果是這個空間中的另一個向量,我們可以把它解碼成一張圖片。
潛在變量
面部圖像組成的潛在空間是由生成神經網絡生成的。
生成神經網絡是一類機器學習算法,從一組訓練數據中學習,并構建廣義模型。 然后我們可以對這些模型進行采樣,以生成新數據樣本,其結果則是基于我們的訓練數據。
這是通過在比原始數據本身參數更少的參數集上訓練神經網絡來實現的。 這樣做,模型學習到了更緊湊的訓練數據表征。這些表征被稱為潛在變量。
從潛在空間采樣的潛在變量可以被解碼成可觀察的數據樣本。
舉個例子,如果我們要設計一個紅酒杯,由兩個維度可以進行放大操作,讓它變得更寬,或者更高。變大就可以理解為一個潛在變量。
我們可以在這個空間中探索,但是遇到更復雜的圖像,比如人臉怎么辦呢?SpaceSheet能直觀地幫助我們理解變量在潛在空間中的連續變化。
屬性向量
通過減法,可以從潛在變量中分離出特定屬性。 通過減法求得的差被稱為屬性向量,并且可以應用于其他潛在變量,轉移它的屬性。
例如,通過計算笑臉圖像的平均矢量并減去沒有笑容的臉部圖像的平均矢量,在臉部的潛在空間中構建“微笑矢量”。
然后可以將該向量添加到潛在變量中或從潛在變量中減去該向量以使它們或多或少地“笑臉”。
盡管提取屬性向量被證明是有效的,但是它還會受到其他“相關屬性”的影響,說明屬性之間存在著強相關性。
例如,從上圖中我們可以發現,“微笑矢量”的應用導致為人臉添加更多女性屬性(女性更愛微笑?)。
SpaceSheet就是讓用戶在這個空間中執行計算,在電子表格里實時顯示,使用戶能夠立即觀察到操作結果并采取相應措施。
利用這套功能強大的電子表格界面,能夠幫助設計者在潛在空間內進行設計實驗。即使非專業人士也能簡單上手。
對于面部圖像這樣更復雜的空間,SpaceSheet還有一些“高級玩法”更有助于我們理解生成網絡的工作過程。
推理
在線性插值是在兩個變量之間插入一個變量。如果在兩個變量之外,按照線性的方式外推,我們就能夠推理出面部圖片演化的方向。
以上表格圖像中,左上、右上、左下三張人臉圖像都是從左側數據庫中選取,在選中它們后選擇“LERP”,就可以得出右下角人臉圖像。這張圖是根據前3張圖推理得出的。
創建可調節人臉
用戶還能根據已有圖像,創建一個可調節圖像,它與已知圖像的“差異”是認為可控的。
如上圖,MOD單元格中有一個“控制桿”,使用戶能夠圍繞給定的潛在變量進行調整,以獲得類似的潛在變量。
二者的差異程度可以通過控制桿與單元格中心的角度和距離來控制,想怎么變就怎么變。
更多數據集
除了字體和人臉之外,網站上還提供顏色、Word2Vec、MNIST手寫數據集供選擇。
SpaceSheet的實現離不開作者自創的“神經網絡”——研究生導師網絡。
△ 作者的神經網絡——“研究生導師網絡”
Tom White新西蘭惠靈頓大學設計學院的一名高級講師, 他目前的研究重點是神經網絡與設計師合作的創造潛力。
這套工具是由他和他的研究生Bryan Loh組成的“神經網絡”共同完成的:
把隨機idea輸入給“生成器”研究生,然后把研究生的idea結果輸入給“判別器”導師,再確定研究成果是否可以發表。
項目地址:
https://vusd.github.io/spacesheet/
GitLab地址:
https://gitlab.com/bryanlohjy/spacesheets-mdi-eval
— 完 —
誠摯招聘
量子位正在招募編輯/記者,工作地點在北京中關村。期待有才氣、有熱情的同學加入我們!相關細節,請在量子位公眾號(QbitAI)對話界面,回復“招聘”兩個字。
量子位 QbitAI · 頭條號簽約作者
?'?' ? 追蹤AI技術和產品新動態
*請認真填寫需求信息,我們會在24小時內與您取得聯系。