QT中,我將一張數據庫表顯示在tableView上,我需要去設置或修改tableView上每一行的顏色,該怎么做?
在QT的widget中用tableview顯示sqlite數據庫表中的內容。
假設有數據庫文件test.db,有表table(id integer, name nvarchar(20),age integer),且有數條數據。
首先用QTcreator創建一個基于Widget類的窗口,再拖一個tableview到widget中,保存,然后按照如下方法進行:
1.在widget.h中增添頭文件:QtSql/qsql.h、QtSql/QsqlDatabase、QtSql/QsqlQuery、QtSql/QsqlQueryModel
2.在.pro工程文件中添加:QT+=sql
3.在widget.cpp中widget的構造函數中添加如下代碼:
QsqDatabase db = QsqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("test.db");
if(!db.open())
{
//錯誤處理
}
static QSqlQueryModel *model = new QSqlQueryModel(ui->tableview);
model->setQuery(QString("select * from table"));
model->setHeaderData(0,Qt::Horizontal,QObject::tr("編號"));
model->setHeaderData(1,Qt::Horizontal,QObject::tr("姓名"));
model->setHeaderData(2,Qt::Horizontal,QObject::tr("年齡"));
ui->tableview->setModel(model);
db->close();
這樣之后,table表里的內容就會顯示到tableview中了。
EXCEL中FIND函數的用法
EXCEL中FIND函數的具體操作方法如下:
1、函數的格式:find(find_text,within_text,start_num),功能:within_text所示的字符串中,從左邊第start_num個字符開展,查找find_text所示的子字符串。
2、字符串天心區新老路104號,第2個字符開始查找區新字符串的位置。
3、第4個字符查找,沒有子字符串,FIND函數返回了值錯誤,說明沒有查找到子字符串。
4、start_num參數,原字符串第幾個字符查找為選參數,FIND函數查找是從第一個字符串開始。
5、FERROR函數,對find函數未找到匹配字符時的結果進行二次處理。IFERROR函數的格式是:IFERROR(value,value_if_error),功能是對value進行判斷,如果value是一個錯誤值,則返回value_if_error所示的值。
6、字符串天心區新老路104號,第4個字符查找區新子字符,返回的值是錯誤,顯示未找到,否則顯示find返回的正確值。
Find函數用法=Find(查找的字符串,被查找的字符串或所在位置,查找開始的位置(如省略,則認為從第一位開始))
軟件版本:Office2013
舉例說明如下:
1.利用find函數,找出1在A列個單元格出現的位置:
2.輸入公式如下:
3.下拉填充得到結果:
建議你查EXCEL幫助。
-----------------------------
FIND 用于查找其他文本字符串 (within_text) 內的文本字符串 (find_text),并從 within_text 的首字符開始返回 find_text 的起始位置編號。也可使用 SEARCH 查找其他文本字符串中的某個文本字符串,但是,FIND 和 SEARCH 不同,FIND 區分大小寫并且不允許使用通配符。
FINDB 用于查找其他文本字符串 (within_text) 內的文本字符串 (find_text),并基于每個字符所使用的字節數從 within_text 的首字符開始返回 find_text 的起始位置編號。此函數用于雙字節字符。也可使用 SEARCHB 查找其他文本字符串中的某個文本字符串。
語法
FIND(find_text,within_text,start_num)
FINDB(find_text,within_text,start_num)
Find_text 是要查找的文本。
Within_text 是包含要查找文本的文本。
Start_num 指定開始進行查找的字符。within_text 中的首字符是編號為 1 的字符。如果忽略 start_num,則假設其為 1。
提示
使用 start_num 可跳過指定數目的字符。例如,假定使用文本字符串“AYF0093.YoungMensApparel”,如果要查找文本字符串中說明部分的第一個“Y”的編號,則可將 start_num 設置為 8,這樣就不會查找文本的序列號部分。FIND 將從第 8 個字符開始查找,而在下一個字符處即可找到 find_text,于是返回編號 9。FIND 總是從 within_text 的起始處返回字符編號,如果 start_num 大于 1,也會對跳過的字符進行計數。
說明
如果 find_text 是空文本 (""),則 FIND 會匹配搜索串中的首字符(即:編號為 start_num 或 1 的字符)。
Find_text 中不能包含通配符。
如果 within_text 中沒有 find_text,則 FIND 和 FINDB 返回錯誤值 #VALUE!。
如果 start_num 不大于 0,則 FIND 和 FINDB 返回錯誤值 #VALUE!。
如果 start_num 大于 within_text 的長度,則 FIND 和 FINDB 返回錯誤值 #VALUE!。
這里粘貼一篇《Excel表格的35招必學秘技》希望對你有幫助。
也許你已經在Excel中完成過上百張財務報表,也許你已利用Excel函數實現過上千次的復雜運算,也許你認為Excel也不過如此,甚至了無新意。但我們平日里無數次重復的得心應手的使用方法只不過是Excel全部技巧的百分之一。本專題從Excel中的一些鮮為人知的技巧入手,領略一下關于Excel的別樣風情。
一、讓不同類型數據用不同顏色顯示
在工資表中,如果想讓大于等于2000元的工資總額以“紅色”顯示,大于等于1500元的工資總額以“藍色”顯示,低于1000元的工資總額以“棕色”顯示,其它以“黑色”顯示,我們可以這樣設置。
1.打開“工資表”工作簿,選中“工資總額”所在列,執行“格式→條件格式”命令,打開“條件格式”對話框。單擊第二個方框右側的下拉按鈕,選中“大于或等于”選項,在后面的方框中輸入數值“2000”。單擊“格式”按鈕,打開“單元格格式”對話框,將“字體”的“顏色”設置為“紅色”。
2.按“添加”按鈕,并仿照上面的操作設置好其它條件(大于等于1500,字體設置為“藍色”;小于1000,字體設置為“棕色”)。
3.設置完成后,按下“確定”按鈕。
看看工資表吧,工資總額的數據是不是按你的要求以不同顏色顯示出來了。
二、建立分類下拉列表填充項
我們常常要將企業的名稱輸入到表格中,為了保持名稱的一致性,利用“數據有效性”功能建了一個分類下拉列表填充項。
1.在Sheet2中,將企業名稱按類別(如“工業企業”、“商業企業”、“個體企業”等)分別輸入不同列中,建立一個企業名稱數據庫。
2.選中A列(“工業企業”名稱所在列),在“名稱”欄內,輸入“工業企業”字符后,按“回車”鍵進行確認。
仿照上面的操作,將B、C……列分別命名為“商業企業”、“個體企業”……
3.切換到Sheet1中,選中需要輸入“企業類別”的列(如C列),執行“數據→有效性”命令,打開“數據有效性”對話框。在“設置”標簽中,單擊“允許”右側的下拉按鈕,選中“序列”選項,在下面的“來源”方框中,輸入“工業企業”,“商業企業”,“個體企業”……序列(各元素之間用英文逗號隔開),確定退出。
再選中需要輸入企業名稱的列(如D列),再打開“數據有效性”對話框,選中“序列”選項后,在“來源”方框中輸入公式:=INDIRECT(C1),確定退出。
4.選中C列任意單元格(如C4),單擊右側下拉按鈕,選擇相應的“企業類別”填入單元格中。然后選中該單元格對應的D列單元格(如D4),單擊下拉按鈕,即可從相應類別的企業名稱列表中選擇需要的企業名稱填入該單元格中。
提示:在以后打印報表時,如果不需要打印“企業類別”列,可以選中該列,右擊鼠標,選“隱藏”選項,將該列隱藏起來即可。
三、建立“常用文檔”新菜單
在菜單欄上新建一個“常用文檔”菜單,將常用的工作簿文檔添加到其中,方便隨時調用。
1.在工具欄空白處右擊鼠標,選“自定義”選項,打開“自定義”對話框。在“命令”標簽中,選中“類別”下的“新菜單”項,再將“命令”下面的“新菜單”拖到菜單欄。
按“更改所選內容”按鈕,在彈出菜單的“命名”框中輸入一個名稱(如“常用文檔”)。
2.再在“類別”下面任選一項(如“插入”選項),在右邊“命令”下面任選一項(如“超鏈接”選項),將它拖到新菜單(常用文檔)中,并仿照上面的操作對它進行命名(如“工資表”等),建立第一個工作簿文檔列表名稱。
重復上面的操作,多添加幾個文檔列表名稱。
3.選中“常用文檔”菜單中某個菜單項(如“工資表”等),右擊鼠標,在彈出的快捷菜單中,選“分配超鏈接→打開”選項,打開“分配超鏈接”對話框。通過按“查找范圍”右側的下拉按鈕,定位到相應的工作簿(如“工資.xls”等)文件夾,并選中該工作簿文檔。
重復上面的操作,將菜單項和與它對應的工作簿文檔超鏈接起來。
4.以后需要打開“常用文檔”菜單中的某個工作簿文檔時,只要展開“常用文檔”菜單,單擊其中的相應選項即可。
提示:盡管我們將“超鏈接”選項拖到了“常用文檔”菜單中,但并不影響“插入”菜單中“超鏈接”菜單項和“常用”工具欄上的“插入超鏈接”按鈕的功能。
四、制作“專業符號”工具欄
在編輯專業表格時,常常需要輸入一些特殊的專業符號,為了方便輸入,我們可以制作一個屬于自己的“專業符號”工具欄。
1.執行“工具→宏→錄制新宏”命令,打開“錄制新宏”對話框,輸入宏名?如“fuhao1”?并將宏保存在“個人宏工作簿”中,然后“確定”開始錄制。選中“錄制宏”工具欄上的“相對引用”按鈕,然后將需要的特殊符號輸入到某個單元格中,再單擊“錄制宏”工具欄上的“停止”按鈕,完成宏的錄制。
仿照上面的操作,一一錄制好其它特殊符號的輸入“宏”。
2.打開“自定義”對話框,在“工具欄”標簽中,單擊“新建”按鈕,彈出“新建工具欄”對話框,輸入名稱——“專業符號”,確定后,即在工作區中出現一個工具條。
切換到“命令”標簽中,選中“類別”下面的“宏”,將“命令”下面的“自定義按鈕”項拖到“專業符號”欄上(有多少個特殊符號就拖多少個按鈕)。
3.選中其中一個“自定義按鈕”,仿照第2個秘技的第1點對它們進行命名。
4.右擊某個命名后的按鈕,在隨后彈出的快捷菜單中,選“指定宏”選項,打開“指定宏”對話框,選中相應的宏(如fuhao1等),確定退出。
重復此步操作,將按鈕與相應的宏鏈接起來。
5.關閉“自定義”對話框,以后可以像使用普通工具欄一樣,使用“專業符號”工具欄,向單元格中快速輸入專業符號了。
五、用“視面管理器”保存多個打印頁面
有的工作表,經常需要打印其中不同的區域,用“視面管理器”吧。
1.打開需要打印的工作表,用鼠標在不需要打印的行(或列)標上拖拉,選中它們再右擊鼠標,在隨后出現的快捷菜單中,選“隱藏”選項,將不需要打印的行(或列)隱藏起來。
2.執行“視圖→視面管理器”命令,打開“視面管理器”對話框,單擊“添加”按鈕,彈出“添加視面”對話框,輸入一個名稱(如“上報表”)后,單擊“確定”按鈕。
3.將隱藏的行(或列)顯示出來,并重復上述操作,“添加”好其它的打印視面。
4.以后需要打印某種表格時,打開“視面管理器”,選中需要打印的表格名稱,單擊“顯示”按鈕,工作表即刻按事先設定好的界面顯示出來,簡單設置、排版一下,按下工具欄上的“打印”按鈕,一切就OK了。
六、讓數據按需排序
如果你要將員工按其所在的部門進行排序,這些部門名稱既的有關信息不是按拼音順序,也不是按筆畫順序,怎么辦?可采用自定義序列來排序。
1.執行“格式→選項”命令,打開“選項”對話框,進入“自定義序列”標簽中,在“輸入序列”下面的方框中輸入部門排序的序列(如“機關,車隊,一車間,二車間,三車間”等),單擊“添加”和“確定”按鈕退出。
2.選中“部門”列中任意一個單元格,執行“數據→排序”命令,打開“排序”對話框,單擊“選項”按鈕,彈出“排序選項”對話框,按其中的下拉按鈕,選中剛才自定義的序列,按兩次“確定”按鈕返回,所有數據就按要求進行了排序。
七、把數據徹底隱藏起來
工作表部分單元格中的內容不想讓瀏覽者查閱,只好將它隱藏起來了。
1.選中需要隱藏內容的單元格(區域),執行“格式→單元格”命令,打開“單元格格式”對話框,在“數字”標簽的“分類”下面選中“自定義”選項,然后在右邊“類型”下面的方框中輸入“;;;”(三個英文狀態下的分號)。
2.再切換到“保護”標簽下,選中其中的“隱藏”選項,按“確定”按鈕退出。
3.執行“工具→保護→保護工作表”命令,打開“保護工作表”對話框,設置好密碼后,“確定”返回。
經過這樣的設置以后,上述單元格中的內容不再顯示出來,就是使用Excel的透明功能也不能讓其現形。
提示:在“保護”標簽下,請不要清除“鎖定”前面復選框中的“∨”號,這樣可以防止別人刪除你隱藏起來的數據。
八、讓中、英文輸入法智能化地出現
在編輯表格時,有的單元格中要輸入英文,有的單元格中要輸入中文,反復切換輸入法實在不方便,何不設置一下,讓輸入法智能化地調整呢?
選中需要輸入中文的單元格區域,執行“數據→有效性”命令,打開“數據有效性”對話框,切換到“輸入法模式”標簽下,按“模式”右側的下拉按鈕,選中“打開”選項后,“確定”退出。
以后當選中需要輸入中文的單元格區域中任意一個單元格時,中文輸入法(輸入法列表中的第1個中文輸入法)自動打開,當選中其它單元格時,中文輸入法自動關閉。
九、讓“自動更正”輸入統一的文本
你是不是經常為輸入某些固定的文本,如《電腦報》而煩惱呢?那就往下看吧。
1.執行“工具→自動更正”命令,打開“自動更正”對話框。
2.在“替換”下面的方框中輸入“pcw”(也可以是其他字符,“pcw”用小寫),在“替換為”下面的方框中輸入“《電腦報》”,再單擊“添加”和“確定”按鈕。
3.以后如果需要輸入上述文本時,只要輸入“pcw”字符?此時可以不考慮“pcw”的大小寫?,然后確認一下就成了。
十、在Excel中自定義函數
Excel函數雖然豐富,但并不能滿足我們的所有需要。我們可以自定義一個函數,來完成一些特定的運算。下面,我們就來自定義一個計算梯形面積的函數:
1.執行“工具→宏→Visual Basic編輯器”菜單命令(或按“Alt+F11”快捷鍵),打開Visual Basic編輯窗口。
2.在窗口中,執行“插入→模塊”菜單命令,插入一個新的模塊——模塊1。
3.在右邊的“代碼窗口”中輸入以下代碼:
Function V(a,b,h)V = h*(a+b)/2End Function
4.關閉窗口,自定義函數完成。
以后可以像使用內置函數一樣使用自定義函數。
提示:用上面方法自定義的函數通常只能在相應的工作簿中使用。
十一、表頭下面襯張圖片
為工作表添加的背景,是襯在整個工作表下面的,能不能只襯在表頭下面呢?
1.執行“格式→工作表→背景”命令,打開“工作表背景”對話框,選中需要作為背景的圖片后,按下“插入”按鈕,將圖片襯于整個工作表下面。
2.在按住Ctrl鍵的同時,用鼠標在不需要襯圖片的單元格(區域)中拖拉,同時選中這些單元格(區域)。
3.按“格式”工具欄上的“填充顏色”右側的下拉按鈕,在隨后出現的“調色板”中,選中“白色”。經過這樣的設置以后,留下的單元格下面襯上了圖片,而上述選中的單元格(區域)下面就沒有襯圖片了(其實,是圖片被“白色”遮蓋了)。
提示?襯在單元格下面的圖片是不支持打印的。
十二、用連字符“&”來合并文本
如果我們想將多列的內容合并到一列中,不需要利用函數,一個小小的連字符“&”就能將它搞定(此處假定將B、C、D列合并到一列中)。
1.在D列后面插入兩個空列(E、F列),然后在D1單元格中輸入公式:=B1&C1&D1。
2.再次選中D1單元格,用“填充柄”將上述公式復制到D列下面的單元格中,B、C、D列的內容即被合并到E列對應的單元格中。
3.選中E列,執行“復制”操作,然后選中F列,執行“編輯→選擇性粘貼”命令,打開“選擇性粘貼”對話框,選中其中的“數值”選項,按下“確定”按鈕,E列的內容(不是公式)即被復制到F列中。
4.將B、C、D、E列刪除,完成合并工作。
提示:完成第1、2步的操作,合并效果已經實現,但此時如果刪除B、C、D列,公式會出現錯誤。故須進行第3步操作,將公式轉換為不變的“值”。
生成績條
常有朋友問“如何打印成績條”這樣的問題,有不少人采取錄制宏或VBA的方法來實現,這對于初學者來說有一定難度。出于此種考慮,我在這里給出一種用函數實現的簡便方法。
此處假定學生成績保存在Sheet1工作表的A1至G64單元格區域中,其中第1行為標題,第2行為學科名稱。
1.切換到Sheet2工作表中,選中A1單元格,輸入公式:=IF(MOD(ROW(),3)=0,〃〃,IF(0MOD?ROW(),3(=1,sheet1!Aū,INDEX(sheet1!$A:$G,INT(((ROW()+4)/3)+1),COLUMN())))。
2.再次選中A1單元格,用“填充柄”將上述公式復制到B1至G1單元格中;然后,再同時選中A1至G1單元格區域,用“填充柄”將上述公式復制到A2至G185單元格中。
至此,成績條基本成型,下面簡單修飾一下。
3.調整好行高和列寬后,同時選中A1至G2單元格區域(第1位學生的成績條區域),按“格式”工具欄“邊框”右側的下拉按鈕,在隨后出現的邊框列表中,選中“所有框線”選項,為選中的區域添加邊框(如果不需要邊框,可以不進行此步及下面的操作)。
4.同時選中A1至G3單元格區域,點擊“常用”工具欄上的“格式刷”按鈕,然后按住鼠標左鍵,自A4拖拉至G186單元格區域,為所有的成績條添加邊框。
按“打印”按鈕,即可將成績條打印出來。
十四、Excel幫你選函數
在用函數處理數據時,常常不知道使用什么函數比較合適。Excel的“搜索函數”功能可以幫你縮小范圍,挑選出合適的函數。
執行“插入→函數”命令,打開“插入函數”對話框,在“搜索函數”下面的方框中輸入要求(如“計數”),然后單擊“轉到”按鈕,系統即刻將與“計數”有關的函數挑選出來,并顯示在“選擇函數”下面的列表框中。再結合查看相關的幫助文件,即可快速確定所需要的函數。
十五、同時查看不同工作表中多個單元格內的數據
有時,我們編輯某個工作表(Sheet1)時,需要查看其它工作表中(Sheet2、Sheet3……)某個單元格的內容,可以利用Excel的“監視窗口”功能來實現。
執行“視圖→工具欄→監視窗口”命令,打開“監視窗口”,單擊其中的“添加監視”按鈕,展開“添加監視點”對話框,用鼠標選中需要查看的單元格后,再單擊“添加”按鈕。重復前述操作,添加其它“監視點”。
以后,無論在哪個工作表中,只要打開“監視窗口”,即可查看所有被監視點單元格內的數據和相關信息。
十六、為單元格快速畫邊框
在Excel 2002以前的版本中,為單元格區域添加邊框的操作比較麻煩,Excel 2002對此功能進行了全新的拓展。
單擊“格式”工具欄上“邊框”右側的下拉按鈕,在隨后彈出的下拉列表中,選“繪圖邊框”選項,或者執行“視圖→工具欄→邊框”命令,展開“邊框”工具欄。
單擊工具欄最左側的下拉按鈕,選中一種邊框樣式,然后在需要添加邊框的單元格區域中拖拉,即可為相應的單元格區域快速畫上邊框。
提示:①如果畫錯了邊框,沒關系,選中工具欄上的“擦除邊框”按鈕,然后在錯誤的邊框上拖拉一下,就可以清除掉錯誤的邊框。②如果需要畫出不同顏色的邊框,可以先按工具欄右側的“線條顏色”按鈕,在隨后彈出的調色板中選中需要的顏色后,再畫邊框即可。③這一功能還可以在單元格中畫上對角的斜線。
十七、控制特定單元格輸入文本的長度
你能想象當你在該輸入四位數的單元格中卻填入了一個兩位數,或者在該輸入文字的單元格中你卻輸入了數字的時候,Excel就能自動判斷、即時分析并彈出警告,那該多好啊!要實現這一功能,對Excel來說,也并不難。
例如我們將光標定位到一個登記“年份”的單元格中,為了輸入的統一和計算的方便,我們希望“年份”都用一個四位數來表示。所以,我們可以單擊“數據”菜單的“有效性”選項。在“設置”卡片“有效性條件”的“允許”下拉菜單中選擇“文本長度”。然后在“數據”下拉菜單中選擇“等于”,且“長度”為“4”。同時,我們再來到“出錯警告”卡片中,將“輸入無效數據時顯示的出錯警告”設為“停止”,并在“標題”和“錯誤信息”欄中分別填入“輸入文本非法!”和“請輸入四位數年份。”字樣。
很顯然,當如果有人在該單元格中輸入的不是一個四位數時,Excel就會彈出示的警告對話框,告訴你出錯原因,并直到你輸入了正確“樣式”的數值后方可繼續錄入。神奇吧?其實,在Excel的“數據有效性”判斷中,還有許多特殊類型的數據格式可選,比如“文本類型”啊,“序列大小”啊,“時間遠近”啊,如你有興趣,何不自作主張,自己設計一種檢測標準,讓你的Excel展示出與眾不同的光彩呢。
十八、成組填充多張表格的固定單元格
我們知道每次打開Excel,軟件總是默認打開多張工作表。由此就可看出Excel除了擁有強大的單張表格的處理能力,更適合在多張相互關聯的表格中協調工作。要協調關聯,當然首先就需要同步輸入。因此,在很多情況下,都會需要同時在多張表格的相同單元格中輸入同樣的內容。
那么如何對表格進行成組編輯呢?首先我們單擊第一個工作表的標簽名“Sheet1”,然后按住Shift鍵,單擊最后一張表格的標簽名“Sheet3”(如果我們想關聯的表格不在一起,可以按住Ctrl鍵進行點選)。此時,我們看到Excel的標題欄上的名稱出現了“工作組”字樣,我們就可以進行對工作組的編輯工作了。在需要一次輸入多張表格內容的單元格中隨便寫點什么,我們發現,“工作組”中所有表格的同一位置都顯示出相應內容了。
但是,僅僅同步輸入是遠遠不夠的。比如,我們需要將多張表格中相同位置的數據統一改變格式該怎么辦呢?首先,我們得改變第一張表格的數據格式,再單擊“編輯”菜單的“填充”選項,然后在其子菜單中選擇“至同組工作表”。這時,Excel會彈出“填充成組工作表”的對話框,在這里我們選擇“格式”一項,點“確定”后,同組中所有表格該位置的數據格式都改變了。
十九、改變文本的大小寫
在Excel中,為表格處理和數據運算提供最強大支持的不是公式,也不是數據庫,而是函數。不要以為Excel中的函數只是針對數字,其實只要是寫進表格中的內容,Excel都有對它編輯的特殊函數。例如改變文本的大小寫。
在Excel 2002中,至少提供了三種有關文本大小寫轉換的函數。它們分別是:“=UPPER(源數據格)”,將文本全部轉換為大寫;“=LOWER(源數據格)”,將文本全部轉換成小寫;“=PROPER(源數據格)”,將文本轉換成“適當”的大小寫,如讓每個單詞的首字母為大寫等。例如,我們在一張表格的A1單元格中輸入小寫的“excel”,然后在目標單元格中輸入“=UPPER(A1)”,回車后得到的結果將會是“EXCEL”。同樣,如果我們在A3單元格中輸入“mr.weiwei”,然后我們在目標單元格中輸入“=PROPER(A3)”,那么我們得到的結果就將是“Mr.Weiwei”了。
二十、提取字符串中的特定字符
除了直接輸入外,從已存在的單元格內容中提取特定字符輸入,絕對是一種省時又省事的方法,特別是對一些樣式雷同的信息更是如此,比如員工名單、籍貫等信息。
如果我們想快速從A4單元格中提取稱謂的話,最好使用“=RIGHT(源數據格,提取的字符數)”函數,它表示“從A4單元格最右側的字符開始提取2個字符”輸入到此位置。當然,如果你想提取姓名的話,則要使用“=LEFT(源數據格,提取的字符數)”函數了。還有一種情況,我們不從左右兩端開始,而是直接從數據中間提取幾個字符。比如我們要想從A5單元格中提取“武漢”兩個字時,就只須在目標單元格中輸入“=MID(A5,4,2)”就可以了。意思是:在A5單元格中提取第4個字符后的兩個字符,也就是第4和第5兩個字。
二十一、把基數詞轉換成序數詞 將英文的基數詞轉換成序數詞是一個比較復雜的問題。因為它沒有一個十分固定的模式:大多數的數字在變成序數詞都是使用的“th”后綴,但大凡是以“1”、“2”、“3”結尾的數字卻分別是以“st”、“nd”和“rd”結尾的。而且,“11”、“12”、“13”這3個數字又不一樣,它們卻仍然是以“th”結尾的。因此,實現起來似乎很復雜。其實,只要我們理清思路,找準函數,只須編寫一個公式,就可輕松轉換了。不信,請看:“=A2&IF(OR(VALUE(RIGHT(A2,2))={11,12,13}),〃th〃,IF(OR(VALUE(RIGHT(A2))={1,2,3,},CHOOSE(RIGHT(A2),〃st〃,〃nd〃,〃rd〃),〃th〃))”。該公式盡管一長串,不過含義卻很明確:①如果數字是以“11”、“12”、“13”結尾的,則加上“th”后綴;②如果第1原則無效,則檢查最后一個數字,以“1”結尾使用“st”、以“2”結尾使用“nd”、以“3”結尾使用“rd”;③如果第1、2原則都無效,那么就用“th”。因此,基數詞和序數詞的轉換實現得如此輕松和快捷。
二十二、用特殊符號補齊位數
和財務打過交道的人都知道,在賬面填充時有一種約定俗成的“安全填寫法”,那就是將金額中的空位補齊,或者在款項數據的前面加上“$”之類的符號。其實,在Excel中也有類似的輸入方法,那就是“REPT”函數。它的基本格式是“=REPT(“特殊符號”,填充位數)”。
比如,我們要在中A2單元格里的數字結尾處用“#”號填充至16位,就只須將公式改為“=(A2&REPT(〃#〃,16-LEN(A2)))”即可;如果我們要將A3單元格中的數字從左側用“#”號填充至16位,就要改為“=REPT(〃#〃,16-LEN(A3)))&A3”;另外,如果我們想用“#”號將A4中的數值從兩側填充,則需要改為“=REPT(〃#〃,8-LEN(A4)/2)&A4&REPT(〃#〃)8-LEN(A4)/2)”;如果你還嫌不夠專業,要在A5單元格數字的頂頭加上“$”符號的話,那就改為:“=(TEXT(A5,〃$#,##0.00〃(&REPT(〃#〃,16-LEN(TEXT(A5,〃$#,##0.00〃))))”,一定能滿足你的要求。
二十三、創建文本直方圖
除了重復輸入之外,“REPT”函數另一項衍生應用就是可以直接在工作表中創建由純文本組成的直方圖。它的原理也很簡單,就是利用特殊符號的智能重復,按照指定單元格中的計算結果表現出長短不一的比較效果。
比如我們首先制作一張年度收支平衡表,然后將“E列”作為直方圖中“預算內”月份的顯示區,將“G列”則作為直方圖中“超預算”的顯示區。然后根據表中已有結果“D列”的數值,用“Wingdings”字體的“N”字符表現出來。具體步驟如下:
在E3單元格中寫入公式“=IF(D30,REPT(〃n〃,ROUND(D3*100,0)),〃〃)”,也拖動填充柄至G14。我們看到,一個沒有動用Excel圖表功能的純文本直方圖已展現眼前,方便直觀,簡單明了。
二十四、計算單元格中的總字數
有時候,我們可能對某個單元格中字符的數量感興趣,需要計算單元格中的總字數。要解決這個問題,除了利用到“SUBSTITUTE”函數的虛擬計算外,還要動用“TRIM”函數來刪除空格。比如現在A1單元格中輸入有“how many words?”字樣,那么我們就可以用如下的表達式來幫忙:
“=IF(LEN(A1)=0,0,LEN(TRIM(A1))-LEN(SUBSTITUTE(TRIM(A1),〃,〃,〃〃))+1)”
該式的含義是先用“SUBSTITUTE”函數創建一個新字符串,并且利用“TRIM”函數刪除其中字符間的空格,然后計算此字符串和原字符串的數位差,從而得出“空格”的數量,最后將空格數+1,就得出單元格中字符的數量了。
二十五、關于歐元的轉換
這是Excel 2002中的新工具。如果你在安裝Excel 2002時選擇的是默認方式,那么很可能不能在“工具”菜單中找到它。不過,我們可以先選擇“工具”菜單中的“加載宏”,然后在彈出窗口中勾選“歐元工具”選項,“確定”后Excel 2002就會自行安裝了。
完成后我們再次打開“工具”菜單,單擊“歐元轉換”,一個獨立的專門用于歐元和歐盟成員國貨幣轉換的窗口就出現了。與Excel的其他函數窗口一樣,我們可以通過鼠標設置貨幣轉換的“源區域”和“目標區域”,然后再選擇轉換前后的不同幣種即可。所示的就是“100歐元”分別轉換成歐盟成員國其他貨幣的比價一覽表。當然,為了使歐元的顯示更顯專業,我們還可以點擊Excel工具欄上的“歐元”按鈕,這樣所有轉換后的貨幣數值都是歐元的樣式了。
FIND(find_text,within_text,start_num)
FINDB(find_text,within_text,start_num)
Find_text 是要查找的文本。
Within_text 是包含要查找文本的文本。
Start_num 指定開始進行查找的字符。within_text 中的首字符是編號為 1 的字符。如果忽略 start_num,則假設其為 1。
如果 find_text 是空文本 (""),則 FIND 會匹配搜索串中的首字符(即:編號為 start_num 或 1 的字符)。
Find_text 中不能包含通配符。
如果 within_text 中沒有 find_text,則 FIND 和 FINDB 返回錯誤值 #VALUE!。
如果 start_num 不大于 0,則 FIND 和 FINDB 返回錯誤值 #VALUE!。
如果 start_num 大于 within_text 的長度,則 FIND 和 FINDB 返回錯誤值 #VALUE!。
例如:=FIND("好","你好啊") 等于 2
想在mysql數據庫中的表中插入一列,怎么做?
傳統情況
我們先回顧一下,在沒有 "立刻加列" 功能時,加列操作是怎么完成的。我們也借此來熟悉一下本期的圖例:
當進行 加列操作 時,所有的數據行 都必須要 增加一段數據(圖中的 列 4 數據)
如上一期圖解所講,當改變數據行的長度,就需要 重建表空間(圖中灰藍的部分為發生變更的部分)
數據字典中的列定義也會被更新
以上操作的問題在于 每次加列 操作都需要重建表空間,這就需要大量 IO以及大量的時間
立刻加列
"立刻加列" 的過程如下圖:
請點擊輸入圖片描述
請點擊輸入圖片描述
"立刻加列" 時,只會變更數據字典中的內容,包括:
在列定義中增加 新列的定義
增加 新列的默認值
"立刻加列" 后,當要讀取表中的數據時:
由于 "立刻加列" 沒有 變更行數據,讀取的行數據只有 3 列
MySQL 會將 新增的第 4 列的默認值,追加到 讀取的數據后
以上過程描述了 如何讀取 在 "立刻加列" 之前寫入的數據,其實質是:在讀取數據的過程中,"偽造" 了一個新列出來
那么如何讀取 在 "立刻加列" 之后 寫入的數據呢 ? 過程如下圖:
當讀取 行 4 時:
請點擊輸入圖片描述
請點擊輸入圖片描述
通過判斷 數據行的頭信息中的instant 標志位,可以知道該行的格式是 "新格式":該行頭信息后有一個新字段 "列數"
通過讀取 數據行的 "列數" 字段,可以知道 該行數據中多少列有 "真實" 的數據,從而按列數讀取數據
通過上圖可以看到:讀取 在"立刻加列" 前/后寫入的數據是不同的流程
通過以上的討論,我們可以總結 "立刻加列" 之所以高效的原因是:
在執行 "立刻加列" 時,不變更數據行的結構
讀取 "舊" 數據時,"偽造" 新增的列,使結果正確
寫入 "新" 數據時,使用了新的數據格式(增加了instant標志位 和 "列數" 字段),以區分新舊數據
讀取 "新" 數據時,可以如實讀取數據
那么 我們是否能一直 "偽造" 下去 ? "偽造" 何時會被拆穿 ?
考慮以下場景:
用 "立刻加列" 增加列 A
寫入數據行 1
用 "立刻加列" 增加列 B
寫入數據行 2
刪除列 B
我們推測一下 "刪除列 B" 的最小代價:需要修改 數據行中的instant標志位或 "列數" 字段,這至少會影響到 "立刻加列" 之后寫入的數據行,成本類似于重建數據
從以上推測可知:當出現 與 "立刻加列" 操作不兼容 的 DDL 操作時,數據表需要進行重建,如下圖所示:
請點擊輸入圖片描述
請點擊輸入圖片描述
擴展思考題:是否能設計其他的數據格式,取代instant標志位和 "列數" 字段,使得 加列/刪列 操作都能 "立刻完成" ?(提示:考慮 加列 - 刪列 - 再加列 的情況)
使用限制
在了解原理之后,我們來看看 "立刻加列" 的使用限制,就很容易能理解其中的前兩項:
"立刻加列" 的加列位置只能在表的最后,而不能加在其他列之間
在元數據中,只記錄了 數據行 應有多少列,而沒有記錄 這些列 應出現的位置。所以無法實現指定列的位置
"立刻加列" 不能添加主鍵列
加列 不能涉及聚簇索引的變更,否則就變成了 "重建" 操作,不是 "立刻" 完成了
"立刻加列"不支持壓縮的表格式
按照 WL 的說法:"COMPRESSED is no need to supported"(沒必要支持不怎么用的格式)
總結回顧
我們總結一下上面的討論:
"立刻加列" 之所以高效的原因是:
在執行 "立刻加列" 時,不變更數據行的結構
讀取 "舊" 數據時,"偽造" 新增的列,使結果正確
寫入 "新" 數據時,使用了新的數據格式 (增加了 instant 標志位 和 "列數" 字段),以區分新舊數據
讀取 "新" 數據時,可以如實讀取數據
"立刻加列" 的 "偽造" 手法,不能一直維持下去。當發生 與 "立刻加列" 操作不兼容 的 DDL 時,表數據就會發生重建
回到之前遺留的兩個問題:
"立刻加列" 是如何工作的 ?
我們已經解答了這個問題
所謂 "立刻加列" 是否完全不影響業務,是否是真正的 "立刻" 完成 ?
可以看到:就算是 "立刻加列",也需要變更 數據字典,那么 該上的鎖還是逃不掉的。也就是說 這里的 "立刻" 指的是 "不變更數據行的結構",而并非指 "零成本地完成任務"
命令如下:
alter table tableName add newColumn varchar(8) comment '新添加的字段'
注意:
在這句語句中需要注意的是,comment為注釋,就像在java中//作用是一樣的
comment后需要加單引號將注釋引起來。
相關推薦:
最高額保證法律依據(民法典后保證最高額擔保的規定)
中外合資經營企業的資本(中外合資企業注冊資本金要求)
車輛抵押貸款(汽車抵押貸款需要什么條件)
國有企業設立的資料(國有企業注冊條件)
怎么注冊公司流程(公司注冊流程及需要的材料)