前段時(shí)間發(fā)現(xiàn),Blogjava的登錄頁面居然沒有驗(yàn)證碼了,圖片顯示錯(cuò)誤,無法登錄,預(yù)感這個(gè)地方要涼,只好到處找替代,但沒找到好用的博客,github是一個(gè)選項(xiàng),但似乎不是很適合做博客。
現(xiàn)在終于又可以登錄了,不過首頁居然只剩一篇文章,我以為數(shù)據(jù)都沒了,登錄發(fā)現(xiàn)還是有的,不過太讓人不放心了。
2007年7月9日 #
其實(shí)我覺得用java結(jié)合SQL來做同樣的事情更簡單,但是EXCEL的好處是不用編程,雖然里面有好多陷阱,但是掌握之后能夠熟練運(yùn)用還是比每次都編個(gè)程序更簡單。VLOOKUP函數(shù)的使用比較復(fù)雜,搞了好久都不明白,終于找到了下面這篇文章,解決了很多問題。
以下是轉(zhuǎn)載文章,原來的出處不知道是哪里,應(yīng)該是來自
VLOOKUP函數(shù)是Excel中幾個(gè)最重函數(shù)之一,為了方便大家學(xué)習(xí),蘭色幻想特針對VLOOKUP函數(shù)的使用和擴(kuò)展應(yīng)用,進(jìn)行一次全面綜合的說明。本文為入門部分
一、入門級(jí)
VLOOKUP是一個(gè)查找函數(shù),給定一個(gè)查找的目標(biāo),它就能從指定的查找區(qū)域中查找返回想要查找到的值。它的基本語法為:
VLOOKUP(查找目標(biāo),查找范圍,返回值的列數(shù),精確OR模糊查找)
下面以一個(gè)實(shí)例來介紹一下這四個(gè)參數(shù)的使用
例1:如下圖所示,要求根據(jù)表二中的姓名,查找姓名所對應(yīng)的年齡。
公式:B13 =VLOOKUP(A13,$B$2:$D$8,3,0)
參數(shù)說明:
1 查找目標(biāo):就是你指定的查找的內(nèi)容或單元格引用。本例中表二A列的姓名就是查找目標(biāo)。我們要根據(jù)表二的“姓名”在表一中A列進(jìn)行查找。
公式:B13 =VLOOKUP(A13,$B$2:$D$8,3,0)
2 查找范圍(VLOOKUP(A13,$B$2:$D$8,3,0) ): 指定了查找目標(biāo),如果沒有說從哪里查找,EXCEL肯定會(huì)很為難。所以下一步我們就要指定從哪個(gè)范圍中進(jìn)行查找。VLOOKUP的這第二個(gè)參數(shù)可以從一個(gè) 單元格區(qū)域中查找,也可以從一個(gè)常量數(shù)組或內(nèi)存數(shù)組中查找。本例中要從表一中進(jìn)行查找,那么范圍我們要怎么指定呢?這里也是極易出錯(cuò)的地方。大家一定要注 意,給定的第二個(gè)參數(shù)查找范圍要符合以下條件才不會(huì)出錯(cuò):
A 查找目標(biāo)一定要在該區(qū)域的第一列。本例中查找表二的姓名,那么姓名所對應(yīng)的表一的姓名列,那么表一的姓名列(列)一定要是查找區(qū)域的第一列。象本例中,給定的區(qū)域要從第二列開始,即$B$2:$D$8,而不能是$A$2:$D$8。因?yàn)椴檎业?#8220;姓名”不在$A$2:$D$8區(qū)域的第一列。
B 該區(qū)域中一定要包含要返回值所在的列,本例中要返回的值是年齡。年齡列(表一的D列)一定要包括在這個(gè)范圍內(nèi),即:$B$2:$D$8,如果寫成$B$2:$C$8就是錯(cuò)的。
3 返回值的列數(shù)(B13 =VLOOKUP(A13,$B$2:$D$8,3,0))。這是VLOOKUP第3個(gè)參數(shù)。它是一個(gè)整數(shù)值。它怎么得來的呢。它是“返回值”在第二個(gè)參數(shù)給定的區(qū)域中的列數(shù)。本例中我們要返回的是“年齡”,它是第二個(gè)參數(shù)查找范圍$B$2:$D$8的第3列。這里一定要注意,列數(shù)不是在工作表中的列數(shù)(不是第4列),而是在查找范圍區(qū)域的第幾列。如果本例中要是查找姓名所對應(yīng)的性別,第3個(gè)參數(shù)的值應(yīng)該設(shè)置為多少呢。答案是2。因?yàn)樾詣e在$B$2:$D$8的第2列中。
4 精確OR模糊查找(VLOOKUP(A13,$B$2:$D$8,3,0) ),最后一個(gè)參數(shù)是決定函數(shù)精確和模糊查找的關(guān)鍵。精確即完全一樣,模糊即包含的意思。第4個(gè)參數(shù)如果指定值是0或FALSE就表示精確查找,而值為1 或TRUE時(shí)則表示模糊。這里蘭色提醒大家切記切記,在使用VLOOKUP時(shí)千萬不要把這個(gè)參數(shù)給漏掉了,如果缺少這個(gè)參數(shù)默為值為模糊查找,我們就無法精確查找到結(jié)果了。
好了,關(guān)于VLOOKUP函數(shù)的入門級(jí)應(yīng)用就說到這里,VLOOKUP函數(shù)可不只是這么簡單的查找,我們講的還只是1/10的用法。其他的沒法在一篇文章中說明。敬請期待“VLOOKUP的使用方法-進(jìn)階篇”吧。
上一講咱們學(xué)習(xí)了VLOOKUP的基本用法和示例,本講將介紹VLOOKUP在使用中的一些小技巧。
Excel函數(shù)速成教程全系列(包括VLOOKUP函數(shù),IF函數(shù),offset函數(shù),sumif函數(shù)等66個(gè)函數(shù))預(yù)計(jì)6月初全部錄制完成,現(xiàn)已在淘寶開始預(yù)訂(8折優(yōu)惠),地址:http://item.taobao.com/item.htm?id=17500884347
一、VLOOKUP多行查找時(shí)復(fù)制公式的問題
VLOOKUP函數(shù)的第三個(gè)參數(shù)是查找返回值所在的列數(shù),如果我們需要查找返回多列時(shí),這個(gè)列數(shù)值需要一個(gè)個(gè)的更改,比如返回第2列的,參數(shù)設(shè)置為2,如 果需要返回第3列的,就需要把值改為3。。。如果有十幾列會(huì)很麻煩的。那么能不能讓第3個(gè)參數(shù)自動(dòng)變呢?向后復(fù)制時(shí)自動(dòng)變?yōu)?,3,4,5。。。
在EXCEL中有一個(gè)函數(shù)COLUMN,它可以返回指定單元格的列數(shù),比如
=COLUMNS(A1) 返回值1
=COLUMNS(B1) 返回值2
而單元格引用復(fù)制時(shí)會(huì)自動(dòng)發(fā)生變化,即A1隨公式向右復(fù)制時(shí)會(huì)變成B1,C1,D1。。這樣我們用COLUMN函數(shù)就可以轉(zhuǎn)換成數(shù)字1,2,3,4。。。
例:下例中需要同時(shí)查找性別,年齡,身高,體重。
公式:=VLOOKUP($A13,$B$2:$F$8,COLUMN(B1),0)
公式說明:這里就是使用COLUMN(B1)轉(zhuǎn)化成可以自動(dòng)遞增的數(shù)字。
二、VLOOKUP查找出現(xiàn)錯(cuò)誤值的問題。
1、如何避免出現(xiàn)錯(cuò)誤值。
EXCEL2003 在VLOOKUP查找不到,就#N/A的錯(cuò)誤值,我們可以利用錯(cuò)誤處理函數(shù)把錯(cuò)誤值轉(zhuǎn)換成0或空值。
即:=IF(ISERROR(VLOOKUP(參數(shù)略)),"",VLOOKUP(參數(shù)略)
EXCEL2007,EXCEL2010中提供了一個(gè)新函數(shù)IFERROR,處理起來比EXCEL2003簡單多了。
IFERROR(VLOOKUP(),"")
2、VLOOKUP函數(shù)查找時(shí)出現(xiàn)錯(cuò)誤值的幾個(gè)原因
A、實(shí)在是沒有所要查找到的值
B、查找的字符串或被查找的字符中含有空格或看不見的空字符,驗(yàn)證方法是用=號(hào)對比一下,如果結(jié)果是FALSE,就表示兩個(gè)單元格看上去相同,其實(shí)結(jié)果不同。
C、參數(shù)設(shè)置錯(cuò)誤。VLOOKUP的最后一個(gè)參數(shù)沒有設(shè)置成1或者是沒有設(shè)置掉。第二個(gè)參數(shù)數(shù)據(jù)源區(qū)域,查找的值不是區(qū)域的第一列,或者需要反回的字段不在區(qū)域里,參數(shù)設(shè)置在入門講里已注明,請參閱。
D、數(shù)值格式不同,如果查找值是文本,被查找的是數(shù)字類型,就會(huì)查找不到。解決方法是把查找的轉(zhuǎn)換成文本或數(shù)值,轉(zhuǎn)換方法如下:
文本轉(zhuǎn)換成數(shù)值:*1或--或/1
數(shù)值轉(zhuǎn)抱成文本:&""
VLOOKUP函數(shù)的初級(jí)篇就說到這里了,咱們下一講將介紹VLOOKUP的模糊查找有、反向查找等。
在學(xué)習(xí)了VLOOKUP的入門和初級(jí)篇后,本文將帶將大家學(xué)習(xí)VLOOKUP的進(jìn)階篇:VLOOKUP的模糊查找。
一、字符的模糊查找
在A列我們知道如何查找型號(hào)為“AAA”的產(chǎn)品所對應(yīng)的B列價(jià)格,即:
=VLOOKUP(C1,A:B,2,0)
如果我們需要查找包含“AAA”的產(chǎn)品名稱怎么表示呢?如下圖表中所示。
公式=VLOOKUP("*"&A10&"*",A2:B6,2,0)
公式說明:VLOOKUP的第一個(gè)參數(shù)允許使用通配符“*”來表示包含的意思,把*放在字符的兩邊,即"*" & 字符 & "*"。
二、數(shù)字的區(qū)間查找
數(shù)字的區(qū)間查找即給定多個(gè)區(qū)間,指定一個(gè)數(shù)就可以查找出它在哪個(gè)區(qū)間并返回這個(gè)區(qū)間所對應(yīng)的值。
在VLOOKUP入門中我們提示VLOOKUP的第4個(gè)參數(shù),如果為0或FALSE是精確查找,如果是1或TRUE或省略則為模糊查找,那么實(shí)現(xiàn)區(qū)間查找正是第4個(gè)參數(shù)的模糊查找應(yīng)用。
首先我們需要了解一下VLOOKUP函數(shù)模糊查找的兩個(gè)重要規(guī)則:
1、引用的數(shù)字區(qū)域一定要從小到大排序。雜亂的數(shù)字是無法準(zhǔn)確查找到的。如下面A列符合模糊查找的前題,B列則不符合。
2、模糊查找的原理是:給一定個(gè)數(shù),它會(huì)找到和它最接近,但比它小的那個(gè)數(shù)。詳見下圖說明。
最后看一個(gè)實(shí)例:
例:如下圖所示,要求根據(jù)上面的提成比率表,在提成表計(jì)算表中計(jì)算每個(gè)銷售額的提成比率和提成額。
公式:=VLOOKUP(A11,$A$3:$B$7,2)
公式說明:
1、上述公式省略了VLOOKUP最后一個(gè)參數(shù),相當(dāng)于把第四個(gè)參數(shù)設(shè)置成1或TRUE。這表示VLOOKUP要進(jìn)行數(shù)字的區(qū)間查找。
2、圖中公式中在查找5000時(shí)返回比率表0所對應(yīng)的比率1%,原因是0和10000與5000最接近,但VLOOKUP只選比查找值小的那一個(gè),所以公式會(huì)返回0所對應(yīng)的比率1%。
前言:前面我們分別學(xué)習(xí)了VLOOKUP函數(shù)的入門、初級(jí)和進(jìn)階篇。今天我們學(xué)習(xí)VLOOKUP函數(shù)的高級(jí)應(yīng)用部分-VLOOKUP函數(shù)的數(shù)組應(yīng)用。(本文由蘭色幻想原創(chuàng),轉(zhuǎn)載請注明轉(zhuǎn)自excel精英培訓(xùn))
一、VLOOKUP的反向查找。
一般情況下,VLOOKUP函數(shù)只能從左向右查找。但如果需要從右向右查找,則需要把區(qū)域進(jìn)行“乾坤大挪移”,把列的位置用數(shù)組互換一下。
例1:要求在如下圖所示表中的姓名反查工號(hào)。
公式:=VLOOKUP(A9,IF({1,0},B2:B5,A2:A5),2,0)
公式剖析:
1、這里其實(shí)不是VLOOKUP可以實(shí)現(xiàn)從右至右的查找,而是利用IF函數(shù)的數(shù)組效應(yīng)把兩列換位重新組合后,再按正常的從左至右查找。
2、IF({1,0},B2:B5,A2:A5)這是本公式中最重要的組成部分。在EXCEL函數(shù)中使用數(shù)組時(shí)(前提時(shí)該函數(shù)的參數(shù)支持?jǐn)?shù)組),返回的結(jié) 果也會(huì)是一個(gè)數(shù)組。這里1和0不是實(shí)際意義上的數(shù)字,而是1相關(guān)于TRUE,0相當(dāng)于FALSE,當(dāng)為1時(shí),它會(huì)返回IF的第二個(gè)參數(shù)(B列),為0時(shí)返 回第二個(gè)參數(shù)(A列)。根據(jù)數(shù)組運(yùn)算返回?cái)?shù)組,所以使用IF后的結(jié)果返回一個(gè)數(shù)組(非單元格區(qū)域):{"張一","A001";"趙 三","A002";"楊五","A003";"孫二","A004"}
二、VLOOKUP函數(shù)的多條件查找。
VLOOKUP函數(shù)需要借用數(shù)組才能實(shí)現(xiàn)多條件查找。
例2:要求根據(jù)部門和姓名查找C列的加班時(shí)間。
分析:我們可以延用例1的思路,我們的努力方向不是讓VLOOKUP本身實(shí)現(xiàn)多條件查找,而是想辦法重構(gòu)一個(gè)數(shù)組。多個(gè)條件我們可以用&連接在一起,同樣兩列我們也可以連接成一列數(shù)據(jù),然后用IF函數(shù)進(jìn)行組合。
公式:{=VLOOKUP(A9&B9,IF({1,0},A2:A5&B2:B5,C2:C5),2,0)}
公式剖析:
1、A9&B9 把兩個(gè)條件連接在一起。把他們做為一個(gè)整體進(jìn)行查找。
2、A2:A5&B2:B5,和條件連接相對應(yīng),把部分和姓名列也連接在一起,作為一個(gè)待查找的整體。
3、IF({1,0},A2:A5&B2:B5,C2:C5) 用IF({1,0}把連接后的兩列與C列數(shù)據(jù)合并成一個(gè)兩列的內(nèi)存數(shù)組。按F9后可以查看的結(jié)果為:
{"銷售張一",1;"銷售趙三",5;"人事楊五",3;"銷售趙三",6}
4、完成了數(shù)組的重構(gòu)后,接下來就是VLOOKUP的基本查找功能了,另外公式中含有多個(gè)數(shù)據(jù)與多個(gè)數(shù)據(jù)運(yùn)算(A2:A5&B2:B5),,所以必須以數(shù)組形式輸入,即按ctrl+shift后按ENTER結(jié)束輸入。
三、VLOOKUP函數(shù)的批量查找。
VLOOKUP一般情況下只能查找一個(gè),那么多項(xiàng)該怎么查找呢?
例3 要求把如圖表中所有張一的消費(fèi)金額全列出來
分析:經(jīng)過前面的學(xué)習(xí),我們也有這樣一個(gè)思路,我們在實(shí)現(xiàn)復(fù)雜的查找時(shí),努力的方向是怎么重構(gòu)一個(gè)查找內(nèi)容和查找的區(qū)域。要想實(shí)現(xiàn)多項(xiàng)查找,我們可以對查找的內(nèi)容進(jìn)行編號(hào),第一個(gè)出現(xiàn)的是后面連接1,第二個(gè)出現(xiàn)的連接2。。。
公式:{=VLOOKUP(B$9&ROW(A1),IF({1,0},$B$2:$B$6&COUNTIF(INDIRECT("b2:b"&ROW($2:$6)),B$9),$C$2:$C$6),2,)}
公式剖析:
1、B$9&ROW(A1) 連接序號(hào),公式向下復(fù)制時(shí)會(huì)變成B$9連接1,2,3
2、給所有的張一進(jìn)行編號(hào)。要想生成編號(hào),就需要生成一個(gè)不斷擴(kuò)充的區(qū)域(INDIRECT("b2:b"&ROW($2:$6)),然后在這個(gè)逐行擴(kuò)充的區(qū)域內(nèi)統(tǒng)計(jì)“張一”的個(gè)數(shù),在連接上$B$2:$B$6后就可以對所有的張一進(jìn)行編號(hào)了。
3、IF({1,0}把編號(hào)后的B列和C組重構(gòu)成一個(gè)兩列數(shù)組
通過以上的講解,我們需要知道,VLOOKUP函數(shù)的基本用法是固定的,要實(shí)現(xiàn)高級(jí)查找,就需要借助其他函數(shù)來重構(gòu)查找內(nèi)容和查找數(shù)組。
至此VLOOKUP函數(shù)從入門到高級(jí)的四篇VLOOKUP函數(shù)使用教程全部結(jié)束了,VLOOKUP函數(shù)在數(shù)組運(yùn)算中還有著其他應(yīng)用,但只是配角了,所以本系列不再介紹。由于筆者水平有限,不免有錯(cuò)漏之處,請大家多多指點(diǎn)。
OLE DB 提供程序 'MSDAORA' 報(bào)錯(cuò)。
[OLE/DB provider returned message: 未找到 Oracle 客戶端和網(wǎng)絡(luò)組件。這些組件是由 Oracle 公司提供的,是 Oracle 8i 版 (或更高) 客戶軟件安裝的一部分。
在安裝這些組件之前,將無法使用此提供程序。]
OLE DB 錯(cuò)誤跟蹤[OLE/DB Provider 'MSDAORA' IDBInitialize::Initialize returned 0x80004005: ]
Oracle Client | Microsoft Windows NT、 Oracle Microsoft Windows 95、 Client Windows 98 和 Windows 98 SE |
Microsoft Windows 2000/XP/2003 |
7.x | [HKEY_LOCAL_MACHINE\SOFTWARE \Microsoft\TransactionServer\Local Computer\My Computer] "OracleXaLib"="xa73.dll" "OracleSqlLib"="SQLLib18.dll" "OracleOciLib"="ociw32.dll
|
[HKEY_LOCAL_MACHINE\SOFTWARE Microsoft\MSDTC\MTxOCI] "OracleXaLib"="xa73.dll" "OracleSqlLib"="SQLLib18.dll" "OracleOciLib"="ociw32.dll" |
8.0 | [HKEY_LOCAL_MACHINE\SOFTWARE \Microsoft\Transaction Server \Local Computer\My Computer] "OracleXaLib"="xa80.dll" "OracleSqlLib"="sqllib80.dll" "OracleOciLib"="oci.dll" |
[HKEY_LOCAL_MACHINE\SOFTWARE \Microsoft\MSDTC\MTxOCI] "OracleXaLib"="xa80.dll" "OracleSqlLib"="sqllib80.dll" "OracleOciLib"="oci.dll" |
8.1 | [HKEY_LOCAL_MACHINE\SOFTWARE \Microsoft\Transaction Server \Local Computer\My Computer] "OracleXaLib"="oraclient8.dll" "OracleSqlLib"="orasql8.dll" "OracleOciLib"="oci.dll" |
[HKEY_LOCAL_MACHINE\SOFTWARE \Microsoft\MSDTC\MTxOCI] "OracleXaLib"="oraclient8.dll" "OracleSqlLib"="orasql8.dll" "OracleOciLib"="oci.dll" |
9.0 | [HKEY_LOCAL_MACHINE\SOFTWARE \Microsoft\Transaction Server \Local Computer\My Computer] "OracleXaLib"="oraclient9.dll" "OracleSqlLib"="orasql9.dll" "OracleOciLib"="oci.dll" |
[HKEY_LOCAL_MACHINE\SOFTWARE \Microsoft\MSDTC\MTxOCI] "OracleXaLib"="oraclient9.dll" "OracleSqlLib"="orasql9.dll" "OracleOciLib"="oci.dll" |
10.0 | [HKEY_LOCAL_MACHINE\SOFTWARE \Microsoft\Transaction Server \Local Computer\My Computer] "OracleXaLib"="oraclient10.dll" "OracleSqlLib"="orasql10.dll" "OracleOciLib"="oci.dll" |
[HKEY_LOCAL_MACHINE\SOFTWARE \Microsoft\MSDTC\MTxOCI] "OracleXaLib"="oraclient10.dll" "OracleSqlLib"="orasql10.dll" "OracleOciLib"="oci.dll" |
優(yōu)先級(jí) | 運(yùn)算符 | 結(jié)合性 |
1 | () [] . | 從左到右 |
2 | ! +(正) -(負(fù)) ~ ++ -- | 從右向左 |
3 | * / % | 從左向右 |
4 | +(加) -(減) | 從左向右 |
5 | << >> >>> | 從左向右 |
6 | < <= > >= instanceof | 從左向右 |
7 | == != | 從左向右 |
8 | &(按位與) | 從左向右 |
9 | ^ | 從左向右 |
10 | | | 從左向右 |
11 | && | 從左向右 |
12 | || | 從左向右 |
13 | ?: | 從右向左 |
14 | = += -= *= /= %= &= |= ^= ~= <<= >>= >>>= | 從右向左 |
jQuery UI里面只有一個(gè)DatePicker,只能選擇日期,不能選擇時(shí)間,有人做了一個(gè)可以選擇時(shí)間的DateTimePicker,在這里(http://razum.si/jQuery-calendar/TimeCalendar.html)可以看到,把jquery.js,jquery-calendar.js,jquery-calendar.css下回來之后就可以用了。
但是有幾個(gè)Bug需要自己修改:
1、當(dāng)輸入框里面的時(shí)間是0點(diǎn)時(shí),控件顯示不完整,這是因?yàn)橛袀€(gè)函數(shù)有bug,如下所示:
????????
while
?(value.charAt(
0
)?
==
?'
0
'?
)?{
????????????value?
=
?value.substring(
1
);
????????}
這一句,如果是0點(diǎn)的話,最終會(huì)出錯(cuò),因?yàn)樗拈L度最后是1,不能執(zhí)行substring(1),改成下面就好了:
初次使用jQuery,發(fā)現(xiàn)真是個(gè)好東西,把很多東西都簡化了,循環(huán)基本上都去掉了,可以說是開創(chuàng)了JS的一種新模式,雖然開始覺得有點(diǎn)不習(xí)慣,但是很容易學(xué)習(xí)也很容易看懂。一個(gè)神奇的$原來有那么多的功能,很強(qiáng)大,呵呵。
最讓人欣慰的是它屏蔽了所有瀏覽器的差別,可以在各種瀏覽器上用相同的代碼實(shí)現(xiàn)相同的效果。
二維條形碼比普通的條形碼能保存更多的信息,已經(jīng)應(yīng)用到很多領(lǐng)域里面。例如手機(jī)電影票,就是一個(gè)嵌在彩信里面的二維碼圖像。南航也推出了網(wǎng)上辦理登機(jī)牌業(yè)務(wù),辦理完成之后往手機(jī)發(fā)送一條包含二維碼的彩信,到了機(jī)場就可以通過自助設(shè)備掃描二維碼,打印登機(jī)牌。
然而,專業(yè)的二維碼掃描設(shè)備價(jià)格十分昂貴,最便宜的都在1000元以上,到淘寶上搜搜就知道了。借助Java和一個(gè)開源的庫,我們卻可以通過普通的網(wǎng)絡(luò)攝像頭實(shí)現(xiàn)相同的效果,成本只需要幾十塊。
Open Source QR Code Library是一個(gè)開源的QR Code(二維條形碼的一種)生成和讀取的庫,官方網(wǎng)站為:http://qrcode.sourceforge.jp/,里面包含了生成和讀取QR Code的所有代碼,其中有個(gè)jmfexample就能實(shí)現(xiàn)通過攝像頭讀取QR Code,經(jīng)過本人嘗試,幾十塊的普通攝像頭效果已經(jīng)不錯(cuò)了,一次讀取幾百字節(jié)都沒問題。
使用這個(gè)庫的步驟如下:
1、到其官方網(wǎng)站下載回來;
2、到sun的網(wǎng)站下載JMF包并安裝;
3、插上攝像頭,打開我的電腦,查看是否出現(xiàn)“USB視頻設(shè)備”,然后打開,看攝像頭工作是否正常
4、運(yùn)行JMF里面的JMF Registry程序,點(diǎn)擊“Detect Capture Devices”,查找視頻設(shè)備,查找到之后會(huì)在左邊的列表里出現(xiàn)“vfw:Microsoft WDM Image Capture (Win32):0”類似的設(shè)備,點(diǎn)擊就會(huì)在右邊出現(xiàn)其詳細(xì)信息,我的攝像頭是這樣的:
Name = vfw:Microsoft WDM Image Capture (Win32):0
Locator = vfw://0
Output Formats---->
0. javax.media.format.YUVFormat
? YUV Video Format: Size = java.awt.Dimension[width=640,height=480] MaxDataLength = 614400 DataType = class [B yuvType = 32 StrideY = 1280 StrideUV = 1280 OffsetY = 0 OffsetU = 1 OffsetV = 3
1. javax.media.format.YUVFormat
? YUV Video Format: Size = java.awt.Dimension[width=160,height=120] MaxDataLength = 38400 DataType = class [B yuvType = 32 StrideY = 320 StrideUV = 320 OffsetY = 0 OffsetU = 1 OffsetV = 3
2. javax.media.format.YUVFormat
? YUV Video Format: Size = java.awt.Dimension[width=176,height=144] MaxDataLength = 50688 DataType = class [B yuvType = 32 StrideY = 352 StrideUV = 352 OffsetY = 0 OffsetU = 1 OffsetV = 3
3. javax.media.format.YUVFormat
? YUV Video Format: Size = java.awt.Dimension[width=320,height=240] MaxDataLength = 153600 DataType = class [B yuvType = 32 StrideY = 640 StrideUV = 640 OffsetY = 0 OffsetU = 1 OffsetV = 3
4. javax.media.format.YUVFormat
? YUV Video Format: Size = java.awt.Dimension[width=352,height=288] MaxDataLength = 202752 DataType = class [B yuvType = 32 StrideY = 704 StrideUV = 704 OffsetY = 0 OffsetU = 1 OffsetV = 3
注意,其中Output Formats都是javax.media.format.YUVFormat,而QR Code Library里默認(rèn)的設(shè)備不是這種格式的,所以需要對源碼作一定的修改。
5、用Eclipse打開QR Code Library的源碼,作出一些適當(dāng)?shù)男薷模?br />如果攝像頭是上面所說的只支持YUV格式,則需要修改jp.sourceforge.qrcode.example.jmf.camDataSource.java,把setMainSource函數(shù)里的
VideoFormat vidformat = new VideoFormat(VideoFormat.RGB);
修改為
VideoFormat vidformat = new VideoFormat(VideoFormat.YUV);
否則永遠(yuǎn)也找不到攝像頭。
6、把JMF包里的jmf.jar放到Classpath里
7、執(zhí)行jp.sourceforge.qrcode.example.jmf.jmfexample,搞定
當(dāng)然,由于源碼開放的,只要符合許可,你想怎么改都行,可以把它嵌入到某個(gè)應(yīng)用程序里面,這個(gè)程序就具有了掃描QR Code的功能了。
為了充分利用晚上的帶寬,我搞了一部專門的破機(jī)用于BT/EMULE下載,上班時(shí)間為了不影響大家上網(wǎng),必須停止下載任務(wù)。有的下載工具本身帶有計(jì)劃任務(wù)功能,但是有些只能控制速度,不能控制連接,例如eMule,雖然可以停止下載,但是連接還是很多的,脆弱的ADSL路由/Modem經(jīng)不起大量的連接,很容易就死翹翹了。這種情況下,最痛快的解決辦法是拔線,但是每天插拔也不是辦法,軟一點(diǎn)的辦法是禁用網(wǎng)卡,但是每次手動(dòng)操作也不是辦法。更直接的辦法就是計(jì)劃任務(wù)自動(dòng)啟用/禁用網(wǎng)卡了。要實(shí)現(xiàn)這種目的必須要有能夠自動(dòng)運(yùn)行的工具,devcon就是一個(gè)命令行工具,能夠在命令行中實(shí)現(xiàn)“設(shè)備管理器”的功能,我這里只要“啟用/禁用”功能即可。
devcon的下載地址:
http://support.microsoft.com/kb/311272/zh-cn
微軟出品,權(quán)威產(chǎn)品。
使用的時(shí)候還是有點(diǎn)小問題,搜索了一下找不到答案,只有自己解決了:
1、禁用設(shè)備的命令是:
devcon disable 設(shè)備ID
這個(gè)設(shè)備ID怎么得到呢?通過設(shè)備管理器,在設(shè)備上點(diǎn)擊“屬性”,在“詳細(xì)信息”標(biāo)簽里面有個(gè)下拉列表,選擇“設(shè)備范例Id”,下面顯示出來的就是設(shè)備ID,
怎么把這個(gè)ID復(fù)制出來呢?右鍵是沒辦法的,但是直接CTRL+C就OK了。
2、設(shè)備ID不能直接輸入,否則會(huì)把ID開頭相同的一大堆設(shè)備都操作一遍,最后還會(huì)出幾個(gè)錯(cuò)誤提示;加上雙引號(hào)也不行,會(huì)提示沒有設(shè)備被禁用/啟用;必須這樣寫:@"設(shè)備ID",所以最后的命令格式是:
devcon disable @"設(shè)備ID"
不知道是什么道理。
在計(jì)劃任務(wù)里面添加兩個(gè)任務(wù):“啟用網(wǎng)卡”,“禁用網(wǎng)卡”,分別用devcon enable,devcon disable命令即可,例如早上8點(diǎn)半禁用,晚上23:30啟用(有部分好筒子晚上加班)。這樣一來,就可以24小時(shí)開著那幾個(gè)下載程序也不會(huì)有影響了,在網(wǎng)卡禁用的時(shí)候,無論它們怎么嘗試連接,都跳不出如來佛的掌心。
CPU | Phenom X4 9550 盒裝 | 1120 |
主板 | 技嘉GA-MA78G-DS3H | 680 |
內(nèi)存 | Kingston DDR2-800 1G*2 | 140*2=280 |
硬盤 | 希捷7200.11 500GB | 585 |
光驅(qū) | BenQ DW2000 DVD刻錄機(jī) | 225 |
機(jī)箱 | 航嘉時(shí)光之門H301 | 265 |
電源 | TT KK500P (KK500A的升級(jí)版) | 470 |
顯示器 | 三星 2243BW | 1850 |
鍵盤鼠標(biāo) | 雜牌套裝 | 30 |
合計(jì) | 5505 |
申請者 | 審批者 | 執(zhí)行者 | |
未回復(fù)列表 | 自己已發(fā)出但未被執(zhí)行者執(zhí)行的列表 | 申請者已提交但自己未審批的列表 | 審批已通過但自己未執(zhí)行的列表 |
已回復(fù)列表 | 自己已發(fā)出且執(zhí)行者已執(zhí)行的列表 | 申請者已提交且自己已審批的列表 | 審批已通過且自己已執(zhí)行的列表 |