2012年6月30日 星期六

XP sp3 升級出現“您可能是軟件盜版的受害者”的解決方法


Windows XP sp2 升級出現“您可能是軟件盜版的受害者”的解決方法

一般來說 是誤裝了WgaNotify.exe 才會這樣


     微軟發布了對Windows XP的一個新補丁Windows Genuine Advantage 通知(KB905474), 下載該補丁,當你毫不猶豫的點擊“立即安裝”。安裝完畢後,重新啟動電腦,跳出對話框:“您可能是軟件盜版的受害者,單擊立即解決……”。
      面對這種情況,解決方法有以下兩種:

<1>打開註冊表。 “開始”--“運行”輸入Regedit ,定位到註冊表:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Notify\WgaLogon
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\WgaNotify
將WgaLogon和WgaNotify兩項完全刪除,重啟電腦。
刪除X:\windows\system32 (X為你的系統盤符)中的wgatray.exe刪除,再按“F3”搜索一下wgatray.exe,在搜索的高級選項裡勾選“搜索系統文件夾”和“搜索隱藏文件和文件夾”, 將搜索到的wgatray.exe全部刪除。
再刪除下面的文件:
X:\windows\wganotify.log
X:\windows\system32\seld.tmp
X:\windows\system32\wgalogon.dll
重啟系統,然後再將註冊表中HKEY_LOCAL_MACHINE\ SOFTWARE\microsoft\Windows NT\ CurrentVersion\Winlogon\Notify\WgaLogon 項刪除。
不過這種方法不是很徹底,自動更新會提示你未安裝KB905474正版驗證補丁。可以選擇關閉“自動更新”,然後選用“奇虎360安全衛士”或“超級巡警”來更新,這樣更新速度比Windows默認的更新速度快多了。

<2>RemoveWGA 是一個專門用來清除WGA 的小程序,使用者只要通過它,就可以阻止微軟的WGA 在系統每次啟動時企圖連回微軟網站的動作,且使用它並不需要擔心微軟的正版驗證機制,你還是一樣能夠正常的使用Windows Update 的功能,兩者之間並沒有任何衝突。
      RemoveWGA 1.2的下載網頁:
  http://www.greendown.cn/soft/3668.html

2012年6月29日 星期五

google map 網址參數

方法一
到別人設計好的網頁上輸入座標如這個網址

方法二
到google maps的網頁http://maps.google.com/maps
在網址後面加上參數?ll=Lat, Lon即可
若要加入其他參數如地圖,放大比例等等以&連結各參數
z=(1-18)放大比例
t=(k or h)k是衛星圖,h是hybrid
舉例來說
http://maps.google.com/maps?ll=25.101747,121.548840&z=17&t=k就會將你帶到國立故宮博物館並以17級放大倍率的衛星圖顯示在地圖的正中央啦
其他參數可以參考這個網址

2012年6月28日 星期四

破解 下載 yam 影音


yam 天空部落格

破解 /下載 /影音分享



先找出 pID


套上這個網址 http://mymedia.yam.com/api/a/?pID=


就可以跑出mp3檔案的網址 即可食用

擋掉MSN的廣告


from 海芋小站 by 海芋

許多人最近都被更版到MSN最新版本了,而這個MSN最新版本我想大家對他的評價一定都是「不習慣」,另外很礙眼的就是廣告的部份了!其實我們可以修改HOST來擋掉MSN的廣告,或者請你家的MIS直接把MSN的廣告擋掉,來節省廣告下載的頻寬!


如果你是單機用戶,請先在檔案總管輸入「C:\Windows\System32\drivers\etc」,找到「HOSTS」這個檔案,用筆記本來開啟他。





接著,輸入以下的資料並存檔。
127.0.0.1 view.atdmt.com
127.0.0.1 rad.live.com
127.0.0.1 rad.msn.com
127.0.0.1 live.rads.msn.com
127.0.0.1 ads1.msn.com



最後,重新開機,討厭的msn廣告就不見啦!不過廣告不見不代表廣告位置不見,只是用預設的圖案來代替廣告。


PS:由於修改「hosts」這個檔案需要有系統管理員的權限,如果你有存檔上的問題,請先將檔案存到桌面,再把這個檔案複製到這個資料夾蓋掉原本的檔案就可以啦!

EXCEL的各個函數意義

以下是EXCEL各函數的意義,共分為九類,
依序為財務函數、日期與時間函數、數學與三角函數、統計函數、
檢視與參照函數、資料庫函數、文字函數、邏輯函數、資訊函數。

一、財務函數 :
函數名稱           意義
DB            傳回某項固定資產在指定期間按定利率遞減法計算的折舊。
DDB           傳回某項固定資產在指定期間內,按加倍率遞減法或其他指定方法計算折舊值。
FV            根據週期、固定支出及固定利率,傳回投資的未來值。
IPMT          傳回某項投資於付款方式為定期、定額及固定利率時,某一期應付利息之金額。
IRR           傳回某項一連串以數字表示的現金流量及之內部報酬率。
ISPMT         傳回直線式的貸款利息。            
MIRR          傳回依不同利率對各期之現金流量融資的內部報酬率。
NPER          傳回某項每期付款金額及利率為固定之某項投資的期數。
NPV           使用折扣率和未來各期支出(負值)和收入(正值)的情況下,來計算某項投資的淨現值。
PMT           根據固定期數、固定利率,傳回貸款每期付款額。
PPMT          傳回每期付款金額及利率皆為固定之某項投資於傳回該項投資本金數額。
PV            傳回某項投資的淨現值。<淨現值指的是每項投資金額在目前的總價值>
RATE          傳回貸款或年金每期的利率。
SLN           傳回某項固定資產使用"直線折舊法"計算出來的每期折舊金額。
SYD           傳回某項固定資產在某期間按年數合計法(sum-of-years)計算的每期折舊金額。
VDB           傳回某項固定資產在某時間的折舊總數額,折舊係按倍率遞減法或其他您所指定的遞減速率計算。


二、日期與時間函數:
函數名稱           意義                                                                  
DATE          傳回日期的時間序列值。
DATEVALUE     將文字型態的日期資料改為數字的日期型態。
DAY           傳回時間數值所代表的日期數。
DAYS360       根據一年360天(12個月都是30天)的曆法(用於某些會計計算),傳回兩個日期間的日數。
HOUR          傳回時間數值所代表的小時數。
MINUTE        傳回時間數值所代表的分鐘數。
MONTH         傳回時間數值所代表的月份。
NOW           傳回現在日期與時間。
SECOND        傳回對應於日期和時間序列的秒數部分。
TIME          傳回指定時間。
TIMEVALUE     傳回對應於時間文字的序列值。
TODAY         傳回電腦系統內建時鐘的現在日期的序列值。
WEEKDAY       求日期的星期數。
YEAR          傳回對應於日期序列值的年份數(範圍為1900~9999)
                                                                                
                                                                                
三、數學與三角函數:
函數名稱      意義
ABS           傳回數字的絕對值。
ACOS          傳回數字的反餘弦值。
ACOSH         傳回數字的反雙曲線餘弦值。
ASIN          傳回數字的反正弦值。
ASINH         傳回數字的反雙曲線正弦值。
ATAN          傳回數字的反正切值。
ATAN2         傳回指定的X軸及Y軸的反正切值。
ATANH         傳回數字的反雙曲線正切值。
CEILING       指定數值依指定乘算基數無條件的捨入值。
COMBIN        傳回給定項目數量的組合數量,例如COMBINE(8,2) = C(8,2) = 28
COS           傳回數字的餘弦值。
COSH          傳回數字的雙曲線餘弦值。
DEGREES       將弳度轉換成角度。
EVEN          傳回的數字,四捨五入至最接近的偶數整數。
EXP           傳回自然對數e的指數值。
FACT          傳回數字的階乘,指定數值依指定乘算基數無條件的捨入值。
FLOOR         將數字全捨、趨向零,進位到最接近的偶數整數。
INT           傳回指定小數位數無條件捨去之整數值。
LN            傳回數字的自然對數。
LOG           依所指定的基底,傳回數字的對數。
LOG10         傳回以10為基底的的對數數字。
MDETERM       傳回陣列之矩陣行列式。
MINVERSE      傳回儲存在陣列中的矩陣之反矩陣。
MMULT         傳回兩陣列相乘之乘積。
MOD           傳回兩數相除後之餘數。
ODD           無條件進位,傳回與該數值最接近的奇數值。
PI            傳回原周率3.14159265358979,精確度至小數15位。
POWER         傳回數字乘冪的結果。
PRODUCT       把所有引數數值相乘,然後傳回乘積。例如PRODUCT(A2:C2)等於A2到C2儲存格的乘積。
RADIANS       將角度轉換成弳度。與DEGREES相反。
RAND          傳回一個大於等於0且小於1的隨機亂數。
OMAN          將阿拉伯數字轉換成羅馬字,以文字型態表示。
ROUND         依所指定的位數,將數字四捨五入。
ROUNDDOWN     將數值做無條件捨去。
ROUNDUP       將數值做無條件進位。
SIGN          決定數值的正負號。如果此數值是正會傳回1,如果是0,會傳回0,如果是負則會傳回-1。
SIN           傳回數字的正弦值。
SINH          傳回數字的雙曲線正弦值。
SQRT          傳回數值的正平方根。
SUBTOTAL      傳回一個清單或資料庫的小計。
              一般都是以[資料]功能表上的[小計]指令,
              便可以很容易地建立帶有小計的清單。
              一但小計清單建立後,就可以用SUBTOTAL函數來修改。
              例如SUBTOTAL(9,C3:C5) 將使用SUM函數產生C3:C5之小計。
SUM           傳回引數串列中所有數值的總和。
SUMIF         加總符合某特定搜尋準則的儲存格。
SUMPRODUCT    傳回各陣列中所有對應元素乘積的總和。
SUMSQ         傳回所有引數平方的總和。
SUMX2MY2      傳回在兩個陣列的相對數值隻平方差總和。SUMX2PY2      傳回兩個陣列中各元素平方何的總和。
SUMXMY2       傳回兩個陣列中對應數值差的的平方和。
TAN           傳回數字的正切值。
TANH          傳回數字的雙曲線正切值。
TRUNC         將數字中的小數部分捨去而成為整數。
                                                                                
四、統計函數:
函數名稱                         意義
AVEDEV        傳回資料點絕對差距的平方值(根據它們的平均),
                                       _
                            平均差距的方程式是 Σ|X - X|/ n
                                                                                
AVERAGE       傳回數值參數的平均值(算數平均數)。
AVERAGEA      傳回包括數字、文字和邏輯參數的平均值。
BETADIST      傳回累加beta機率密度函數。
BETAINV       傳回累加beta機率密度函數的反函數值。
BINOMDIST     傳回在特定次數之二項分配機率值。
CHIDIST       傳回單尾卡方分配的機率值。
CHIINV        傳回單尾卡方分配的反函數值。
CHITEST       傳回獨立性檢定的結果。
CONFIDENCE    傳回一母體平均數的信賴區間。
CORREL        傳回 array 1 和 array 2 兩範圍儲存格的相關係數。
COUNT         計算含有數字的儲存格數量,以及引數清單中的數字。
COUNTA        計算不是空白的儲存格數量,以及引數清單中的數字。
COUNTBLANK    計算指定範圍內空白儲存格的個數。
COUNTIF       計算指定範圍內符合某搜尋準則的儲存格個數。
COVAR         傳回共變數,也就是每一個資料點對差距乘積的平均值。
CRIBINOM      傳回累計二項分配函數大於或等於臨界值α之最小整數。
DEVSQ         傳回各資料點與樣本平均數的差異平方和。
EXPONDIST     傳回指數分配之機率值。
FDIST         傳回F機率分配。
FINV          傳回F機率分配的反函數值。
FISHER        傳回在x時的費氏轉換。
FISHERINV     傳回費氏轉換函數的反函數值。
FORCAST       運用現有的值計算或預測未來值。
FREQUENCY     計算某一個範圍內的值出現的次數,並傳回一個垂直數值陣列。
FTEST         傳回F測試結果。
GAMMADIST     傳回伽瑪(gamma)分配函數。
GAMMAINV      傳回伽瑪(gamma)累積份配的反函數。
GAMMALN       傳回伽瑪函數的自然對數。
GEOMEAN       傳回正數資料陣列或範圍的幾何平均數。
GROWTH        使用現有的資料預測其指數成長。
HARMEAN       傳回一個資料組的調和平均數。
HYPGEODIST    傳回超幾何分配。
INTERCEPT     利用已知的x值和y值所畫出的Y軸,計算一直線與其相交的點。
KURT          傳回一個資料組的峰度值(kurtosis)。
LARGE         傳回資料組中第k個最大的數值。
LINEST        使用最小平方法計算最適合於觀測資料組的迴歸直線公式,並傳回該直線公式的陣列。
LOGEST        此函數在迴歸分析中計算符合資料的指數曲線,並傳回描述該曲線的數值陣列。
LOGINV        傳回x之對數常態累積分配函數的反函數。其中ln(x)通常以mean和standard_dev為分配參數。
LOGNORMDIST   傳回x的累積對數常態分配。其中ln(x)為參數平均數和standard_dev是常態分配。
MAX           傳回引數串列中的最大值。
MAXA          傳回引數串列中的最大值,包括數字、文字和邏輯值。
MEDIAN        傳回引數串列中的中位數。
MIN           傳回引數串列中的最小值。
MINA          傳回引數串列中的最小值,包括數字、文字和邏輯值。
MODE          傳回在一陣列或範圍的資料中出現頻率最高的值(眾數)。
NEGBINOMDIST  傳回負二項分配的機率值。
NORMDIST      根據指定之平均數和標準差,傳回其常態累積分配函數。
NORMINV       根據指定之平均數和標準差,傳回其常態累積分配函數之反函數。
NORMSDIST     傳回標準常態累積分配函數。
NORMSINV      傳回平均數為0且標準差為1的標準常態累積分配函數之反函數。
PEARSON       傳回皮耳森積差相關係數r。
              此係數為從-1.0到1.0的無方向性係數,用以反應兩個資料組之間線性關係的程度。
PERCENTILE    從一個範圍裡找出位於其中第k個百分位數的值。可以利用這個函數建立一個可接受的臨界值。
PERCENTRANK   傳回某數值在一個資料組中的百分比的等級。
PERMUT        傳回從數值物件中選取特定數量的物件時,所有可能排列方式的個數。
POISSON       傳回poisson機率分配。
PROB          傳回落在lower_limit和upper_limit之間的機率。
QUARTILE      傳回一個資料組的四分位數。
RANK          傳回某數字在一串數字清單中的等級。
RSQ           傳回以known_y's和known_x's的資料點,來求皮耳森積差相關係數的平方值。
SKEW          傳回一個分配的偏態。偏態是指一個分配的對稱情形。
SLOPE         傳回線性迴歸線的斜率。
SMALL         傳回資料組中第k個最小的數值。
STANDARDIZE   傳回一個標準化常態分配的值,該分配的特性由mean及standard_dev決定。
STDEV         根據一組樣本估計其標準差。
STDEVA        根據一組樣本估計其標準差。樣本中可包括數字、文字及邏輯值。
STDEVP        將引數串列視為母群體本身,傳回其母體標準差(輸入值中的邏輯值或文字略過不計)。
STDEVPA       將引數串列視為母群體本身,傳回其母體標準差。引數串列可為數字、文字及邏輯值。
STEYX         傳回迴歸中每個由x值預測y值的標準誤差值。
TDIST         傳回Student氏之t-分配。
TINV          傳回指定自由度的Student氏的反t-分配。
TREND         傳回線性趨勢上的數值。
TRIMMEAN      傳回資料組內部的平均值。
TTEST         傳回Student氏t-檢定之機率值。
VAR           估計樣本的變異數。
VARA          估計樣本的變異數,樣本可為數字、文字及邏輯值。
VARP          根據整個母群體計算變異數。
VARPA         根據整個母群體計算變異數。母群體可為數字、文字及邏輯值。
WEIBULL       傳回Weibull分配。
ZTEST         傳回雙尾z檢定之P值。

五、檢視與參照函數:函數名稱                     意義
ADDRESS       根據指定的欄列號碼,建立代表該儲存格的參照位址字串。
AREAS         傳回參照位址中區域的個數。
CHOOSE        使用index_num自引數清單中傳回相對應的引數數值,引數的個數可由1到29個。
COLUMN        傳回參照位址中直欄的欄號。
COLUMNS       傳回參照位址中直欄的欄數。
GETPIVOTDATA  傳回樞紐分析表中的資料
HLOOKUP       在一陣列或表格的第一列中尋找含有某特定值的欄位,再傳回同一欄中某一指定儲存格中的值。
HYPERLINK     建立一個超連結,以開啟在網路伺服器、企業內部網路或是網際網路上的文件。
INDEX         傳回一個表格或範圍內的某個值或參照位址。
INDIRECT      傳回一文字串所指定的參照位址。
LOOKUP        查詢向量或陣列中的數值。
MATCH         根據指定的比對方式,傳回一陣列中與搜尋值相符合之相對位置。
OFFSET        傳回根據所指定的儲存格位址列距及欄距而算出的參照位址。
ROW           傳回參照位址中橫列的列號。
ROWS          傳回參照位址中橫列的列數
RTD           從支援COM自動化的程式中擷取即時資料。
TRANSOPE      傳回一矩陣的轉置矩陣。
VLOOKUP       在一陣列或表格的第一欄中尋找含有某特定值的欄位,再傳回同一列中某一指定儲存格中的值。

六、資料庫函數:函數名稱                                    意義
DAVERAGE      將清單或資料庫中某一欄位內,所有符合所指定之條件的數值平均。
DCOUNT        計算清單或資料庫中某一欄位內,所有符合所指定之條件的儲存格個數。
DCOUNTA       計算清單或資料庫中某一欄位內,所有符合所指定條件之非空白儲存格的個數。
DGET          抽選清單或資料庫中某一欄中符合所指定之條件的單一值。
DMAX          傳回清單或資料庫中某一欄中符合所指定之條件的最大值。
DMIN          傳回清單或資料庫中某一欄中符合所指定之條件的最小值。
DPRODUCT      將清單或資料庫中某一欄位內所有符合所指定之條件的數值相乘。
DSTDEV        根據清單或資料庫中某一欄中所有符合指定條件的數值,估算樣本母體的標準差。
DSTDEVP       根據清單或資料庫中某一欄中所有符合指定條件的數值,計算出母體標準差。
DSUM          將清單或資料庫中某一欄內所有符合指定條件的數值予以加總。
DVAR          根據清單或資料庫中某一欄內所有符合指定條件的數值,估算樣本母體的變異數。
DVARP         根據清單或資料庫中某一欄內所有符合指定條件的數值,計算樣本母體的變異數。
                                                                                              
七、文字函數:
函數名稱      意義
ASC           將雙位元轉換為單位元。
BAHTTEXT      將數字轉換成泰文,並新增一個"Baht."的尾碼。
BIG5          將單位元轉換成雙位元。
CHAR          傳回ASCII數字所指定的字元。
CLEAN         移除文字中所有無法列印的字元。
CODE          傳回文字字串中第一個字元的ASCII數字程式碼。
CONCATENATE   將數個文字串連成一個文字串。
DOLLAR        使用貨幣格式,將一個數字轉換成文字,小數位進位至指定的位數。
EXACT         比較兩個文字字串,傳回TRUE代表兩個完全相同,傳回FALSE代表兩個不相同。
              EXACT會區分大小寫,但會忽略格式設定上的差異。使用此函數可以測試文件中的文字。
FIND          在另一個文字串找到某個文字串,並從被尋找字串的最左邊的字元
              傳回尋找字串起始位置的數字(大小寫視為相異)。
FINDB         將中文字長度視為2,傳回某特定文字字串首次出現在另一個文字字串的字元位置(大小寫視為相異)。
FIXED         將一個數字四捨五入到指定的小數位數,使用句點和逗點以小數點格式製作數字的格式,然後傳回文字               結果。
LEFT          傳回一文字字串中第一個(最左邊)字元或字元組。
LEFTB         將中文字長度視為2,傳回一文字字串中第一個(最左邊)字元或字元組。
LEN           傳回文字字串的字元個數。
LENB          將中文字長度視為2,傳回文字字串的字元個數。
LOWER         將文字串裡的各個大寫字母轉換成小寫字母。
MID           自一字串所指定的某個起始位置傳回特定數字的字元組。
MIDB          將中文字長度視為2,自一字串所指定的某個起始位置傳回特定數字的字元組。
PROPER        將文字字串中的第一個英文字母和任何其他非英文字母的字元後
              之字母轉換成大寫字母。其餘所有的字母則都轉換成小寫字母。
EPLACE        使用不同的文字字串來取代文字字串的某一部分。
REPLACEB      將中文字長度視為2,使用不同的文字字串來取代文字字串的某一部分。
REPT          依指定的次數重複顯示文字。
RIGHT         自一文字串最後(或最右邊)開始,選錄出指定字元長度的字串。
RIGHTB        將中文字長度視為2,自一文字串最後(或最右邊)開始,選錄出指定字元長度的字串。
SEARCH        傳回某特定文字串首次出現在另一個文字串的字元位置(由左向右數,大小寫視為相同)。
SEARCHB       將中文字長度視為2,傳回某特定文字串首次出現在另一個文字串的字元位置
              (由左向右數,大小寫視為相同)。
SUBSTITUTE    將文字串中的部分字串以新字串取代。
T             傳回由數值參照至的文字。如果引數中是數值則傳回空字串,如果是文字則傳回該文字字串。
TEXT          以指定的數字格式將數值轉換成文字。
TRIM          移除文字字串中多餘的空格,僅保留一個空白字元。
UPPER         將文字串裡的各個小寫字母轉換成大寫字母。
USDOLLAR      依照貨幣格式將數字轉換成文字。
VALUE         將代表某數值的文字字串轉換成數字資料。
                                                                                
                                                                                
  ※FIND函數會區別大小寫,而且也不允許使用萬用字元;
    但REPLACE函數不會區別大小寫,而且可以使用萬用字元。
    欲取代文字字串中的特定字串時,可以使用SUBSTITUTE函數;
    若要取代文字字串中指定位置上的任何字串時,則必須使用REPLACE函數。
                                                                                
                                                                                
八、邏輯函數:
函數名稱      意義                                                                                
AND           如果它的所有引數都是TRUE,則傳回TRUE。如果有一個或多個引數是FALSE,則傳回FALSE。
FALSE         傳回邏輯值FALSE。
IF            如果指定的情況為TRUE,則傳回一個值;若結果為FALSE,則傳回另一個值。
              IF函數可用以測試數值和公式的條件。
NOT           將判斷式參數的邏輯值進行TRUE和FALSE對調處裡
OR            如果有任何一個引數的邏輯值為TRUE,即傳回TRUE;唯有所有引數值均為FALSE時,才會傳回FALSE。
TRUE          傳回邏輯值TRUE。
                                                                                
                                                                                
九、資訊函數:
函數名稱      意義                                                                                   
CELL          傳回參照位址範圍中左上角儲存格之格式設定、位址或內容的相關資訊。
ERROR.TYPE    傳回MicrosoftExcel的錯誤值對應的數值。
              可以使用IF函數中ERROR.TYPE測得錯誤值數值,並傳回對應錯誤值的文字字串。
INFO          傳回有關目前作業系統環境的資訊。
ISBLANK       傳回是否為空白儲存格。
ISERR         傳回是否為#N/A之外的任何一種錯誤值。
ISERROR       傳回是否為任何一種錯誤值。
ISLOGICAL     傳回是否為邏輯值。
ISNA          傳回是否為錯誤值#N/A(無法使用的數值)。
ISNONTEXT     傳回是否為任何非文字的項目(無法使用的數值)。
ISNUMBER      傳回是否為數字。
ISREF         傳回是否為參照。
ISTEXT        傳回是否為文字。
N             傳回轉換為數字的值。
NA            傳回錯誤值#N/A
PHONETIC      從文字字串中抽選注音標示字元。
TYPE          傳回值的資料類型(值=1代表數字,2代表文字,4代表邏輯值,16代表錯誤值,64代表陣列)

附註  公式錯誤代碼表
                                                                                
錯誤代碼                     意義                                                   採取措施
                                                                                
#DIV/0!        當公式中出現除數為0                             檢查除數的儲存格,
                           或是空白儲存格。                         如果為0請更改為不是0的數字。
                                                                                
#REF!         公式中所參照的儲存格                              最常出現在公式複製時,
                             位址不正確。                                      直接更改複製後的公式。
                                                                                
#VALUE!       公式中所參照儲存格的                      檢查公式中的儲存格是否有
                        資料不符合運算的格式。                    不合公式的格式,例如不是
                                                                                         設定為數字而是文字格式。
                                                                                
#NUM!         當函數的引數範圍不被                            檢查引數的使用是否符合
                       接受時所出現的訊息。                                       該函數的範圍。
                                                                                
#NAME?        無法辨識公式中的名稱。                      最常出現在函數名稱錯誤時,
                                                                                           請重新檢查公式中的名稱或
                                                                                                   函數名稱是否正確。
                                                                                
######        這不是錯誤代碼,只是                                       直接加寬欄寬即可。
                       儲存格的欄寬太小,不
                         足以顯示出所有的數值。

2012年6月18日 星期一

js数组的使用


1.认识数组
数组就是某类数据的集合,数据类型可以是整型、字符串、甚至是对象
Javascript不支持多维数组,但是因为数组里面可以包含对象(数组也是一个对象),所以数组可以通过相互嵌套实现类似多维数组的功能
1.1 定义数组
声明有10个元素的数组
var a = new Array(10);
此时为a已经开辟了内存空间,包含10个元素,用数组名称加 [下标] 来调用,例如 a[2] 但此时元素并未初始化,调用将返回 undefined
以下代码定义了个可变数组,并进行赋值
var a = new Array();
a[0] = 10;
a[1] = "aaa";
a[2] = 12.6;
上面提过了,数组里面可以放对象,例如下面代码
var a =    new Array();
a[0]    = true;
a[1]    = document.getElementById("text");
a[2]    = {x:11, y:22};
a[3]    = new Array();
数组可以实例化的时候直接赋值,例如
var a = new Array(1, 2, 3, 4, 5);
var b = [1, 2, 3, 4, 5];
a 和 b 都是数组,只不过b用了隐性声明,创建了另一个实例,此时如果用alert(a==b)将弹出false
1.2 多维数组
其实Javascript是不支持多维数组的,在asp里面可以用 dim a(10,3)来定义多维数组,在Javascript里面,如果用 var a = new Array(10,3) 将报错
但是之前说过,数组里面可以包含对象,所以可以把数组里面的某个元素再声明为数组,例如
var a = new Array();
a[0] = new Array();
a[0][0] = 1;
alert(a[0][0]);  //弹出 1
声明的时候赋值
var a = new Array([1,2,3], [4,5,6],    [7,8,9]);
var b = [[1,2,3], [4,5,6], [7,8,9]];
效果一样,a采用常规实例化,b是隐性声明,结果都是生成一个多维数组
1.3 Array literals
这个还真不知中文怎么叫,文字数组?
说到数组,不得不说到Array  Literals,数组其实是特殊的对象,对象有特有属性和方法,通过 对象名.属性 、对象.方法() 来取值和调用,而数组是通过下标来取值,Array Literals跟数组有很多相似,都是某数据类型的集合,但是Array Literals从根本来说,是个对象,声明和调用,跟数组是有区别
var aa = new Object();
aa.x = "cat";
aa.y = "sunny";
alert(aa.x);    //弹出cat
创建一个简单的对象,一般调用是通过aa.x,而如果当成Array  literals的话,用alert(aa[“x”])一样会弹出cat
var a = {x:"cat",    y:"sunny"};
alert(a["y"]);  //弹出sunny
这是另一种创建对象的方法,结果是一样的
网页制作poluoluo文章简介:数组就是某类数据的集合,数据类型可以是整型、字符串、甚至是对象.

2.数组元素的操作
上面已经说过,可以通过 数组[下标] 来读写元素
下标的范围是 0 – (23(上标2) -1),当下标是负数、浮点甚至布尔值的时候,数组会自动转换为对象类型,例如
var b    = new Array();
b[2.2]    = "XXXXX";
alert(b[2.2]);  //-> XXXXX
此时相当于b[“2.2”]  = “XXXXX”
2.1数组的循环
var a = [1,2,3,4,5,6];
for(var i =0; i<a.length; i++){
alert(a[i]);
}
这是最常用的,历遍数组,代码将依次弹出1至6
还有一种常用的
var a = [1,2,3,4,5,6];
for(var e in a){
alert(e);
}
还是依次弹出1至6,for…in是历遍对象(数组是特殊的对象)对象,用在数组上,因为数组没有属性名,所以直接输出值,这结构语句用在对象上,例如下面
var a = {x:1,y:2,z:3};
for(var e in a){
alert(e    + ":" + a[e]);
}
此时e取到的是属性名,即 x、y、x,而要取得值,则采用 数组名[属性],所以 a[e] 等同于 a[“x”]、a[“y”]、a[“z”]
2.2数组常用函数
concat
在现有数组后面追加数组,并返回新数组,不影响现有数组
var a = [123];
var b = "sunnycat";
var c =    ["www",21,"ido"];
var d = {x:3.14, y:"SK"};
var e = [1,2,3,4,[5,6,[7,8]]];
alert(a.concat(b));     // -> 123,sunnycat
alert(a);  //    -> 123
alert(b.concat(c, d));       // -> sunnycatwww,21,ido[object    Object]
alert(c.concat(b));     // -> www,21,ido,sunnycat
alert(e.concat(11,22,33).join(" #    "));       // -> 1 # 2 # 3    # 4 # 5,6,7,8 # 11 # 22 # 33
需要注意的是只能用于数组或字符串,如果被连接(前面的a)的是数值、布尔值、对象,就会报错,字符串连接数组时,字符串会跟数组首元素拼接成新元素,而数组连接字符串则会追加新元素(这点我也不清楚原委,知情者请透露),对于数组里面包含数组、对象的,连接后保持原样
join
用指定间隔符连起来,把数组转为字符串
var a = ['a','b','c','d','e','f','g'];
lert(a.join(","));   // -> a,b,c,d,e,f,g 相当于a.toString()
alert(a.join(" x "));  // -> a x b x c x d x e x f x g
这个很容易理解,但需要注意的是只转换一维数组里面,如果数组里面还有数组,将不是采用join指定的字符串接,而是采用默认的toString(),例如
var a =    ['a','b','c','d','e','f','g',[11,22,33]];
alert(a.join(" * "));  // -> a * b * c * d * e * f * g *    11,22,33
数组里面的数组,并没用 * 连接
网页制作poluoluo文章简介:数组就是某类数据的集合,数据类型可以是整型、字符串、甚至是对象.

pop
删除数组最后一个元素,并返回该元素
var a =    ["aa","bb","cc"];
document.write(a.pop());    // -> cc
document.write(a);        // -> aa, bb
如果数组为空,则返回undefined
push
往数组后面添加数组,并返回数组新长度
var a =    ["aa","bb","cc"];
document.write(a.push("dd"));    // -> 4
document.write(a);        // -> aa,bb,cc,dd
document.write(a.push([1,2,3]));  // -> 5
document.write(a);        // -> aa,bb,cc,dd,1,2,3
跟concat的区别在于,concat不影响原数组,直接返回新数组,而push则直接修改原数组,返回的是数组新长度
sort
数组排序,先看个例子
var a = [11,2,3,33445,5654,654,"asd","b"];
alert(a.sort()); // -> 11,2,3,33445,5654,654,asd,b
结果是不是很意外,没错,排序并不是按整型大小,而是字符串对比,就是取第一个字符的ANSI码对比,小的排前面,相同的话取第二个字符再比,如果要按整型数值比较,可以这样
var a = [11,2,3,33445,5654,654];
a.sort(function(a,b) {
return a - b;
});
alert(a);  //    -> 2,3,11,654,5654,33445
sort()方法有个可选参数,就是代码里的function,这是个简单的例子,不可对非数字进行排序,非数字需要多做判断,这里就不多讲
reverse
对数组进行反排序跟,sort()一样,取第一字符ASCII值进行比较
var a = [11,3,5,66,4];
alert(a.reverse());  // -> 4,66,5,3,11
如果数组里面还包含数组,则当为对象处理,并不会把元素解出来
>var a = ['a','b','c','d','e','f','g',[4,11,33]];
alert(a.reverse());  // -> 4,11,33,g,f,e,d,c,b,a
alert(a.join(" * "));  // -> 4,11,33 * g * f * e * d * c * b * a
按理应该是11排最后面,因为这里把 4,11,33 当做完整的对象比较,所以被排在第一位。看不明白的话,用join()串起来,就明了多
shift
删除数组第一个元素,并返回该元素,跟pop差不多
var a =    ["aa","bb","cc"];
document.write(a.shift());   // -> aa
document.write(a);        // -> bb,cc
当数组为空时,返回undefined
unshift
跟shift相反,往数组最前面添加元素,并返回数组新长度
var a =    ["aa","bb","cc"];
document.write(a.unshift(11));   // -> 4 注:IE下返回undefined
document.write(a);        // -> 11,aa,bb,cc
document.write(a.unshift([11,22]));   // -> 5
document.write(a);        // -> 11,22,11,aa,bb,cc
document.write(a.unshift("cat"));  // -> 6
document.write(a);        // -> cat,11,22,11,aa,bb,cc
注意该方法,在IE下将返回undefined,貌似微软的bug,我在firefox下则能正确发挥数组新长度
网页制作poluoluo文章简介:数组就是某类数据的集合,数据类型可以是整型、字符串、甚至是对象.

slice
返回数组片段
var a = ['a','b','c','d','e','f','g'];
alert(a.slice(1,2));  // -> b
alert(a.slice(2));    // -> c,d,e,f,g
alert(a.slice(-4));   // -> d,e,f,g
alert(a.slice(-2,-6));    // -> 空
a.slice(1,2),从下标为1开始,到下标为2之间的数,注意并不包括下标为2的元素
如果只有一个参数,则默认到数组最后
-4是表示倒数第4个元素,所以返回倒数的四个元素
最后一行,从倒数第2开始,因为是往后截取,所以显然取不到前面的元素,所以返回空数组,如果改成  a.slice(-6,-2) 则返回b,c,d,e
splice
从数组删除某片段的元素,并返回删除的元素
var a = [1,2,3,4,5,6,7,8,9];
document.write(a.splice(3,2));    // -> 4,5
document.write(a);        // -> 1,2,3,6,7,8,9
document.write(a.splice(4));  // -> 7,8,9 注:IE下返回空
document.write(a);        // -> 1,2,3,6
document.write(a.splice(0,1));    // -> 1
document.write(a);        // -> 2,3,6
document.write(a.splice(1,1,["aa","bb","cc"]));   // -> 3
document.write(a);        // -> 2,aa,bb,cc,6,7,8,9
document.write(a.splice(1,2,"ee").join("#")); // -> aa,bb,cc#6
document.write(a);        // -> 2,ee,7,8,9
document.write(a.splice(1,2,"cc","aa","tt").join("#"));  // -> ee#7
document.write(a);        // -> 2,cc,aa,tt,8,9
注意该方法在IE下,第二个参数是必须的,不填则默认为0,例如a.splice(4),在IE下则返回空,效果等同于a.splice(4,0)
toString
把数组转为字符串,不只数组,所有对象均可使用该方法
var a =    [5,6,7,8,9,["A","BB"],100];
document.write(a.toString());    // -> 5,6,7,8,9,A,BB,100
var b = new Date()
document.write(b.toString());    // -> Sat Aug 8 17:08:32 UTC+0800    2009
var c = function(s){
alert(s);
}
document.write(c.toString());    // -> function(s){ alert(s); }
布尔值则返回true或false,对象则返回[object objectname]
相比join()方法,join()只对一维数组进行替换,而toString()则把整个数组(不管一维还是多维)完全平面化
同时该方法可用于10进制、2进制、8进制、16进制转换,例如
var a =    [5,6,7,8,9,"A","BB",100];
for(var i=0; i<a.length; i++){
document.write(a[i].toString()    + " 的二进制是 "    + a[i].toString(2) + " ,八进制是 " + a[i].toString(8) + " ,十六进制是 " + a[i].toString(16));  //    -> 4,5
}
输出结果
5 的二进制是 101 ,八进制是 5 ,十六进制是 5
6 的二进制是 110 ,八进制是 6 ,十六进制是 6
7 的二进制是 111 ,八进制是 7 ,十六进制是 7
8 的二进制是 1000 ,八进制是 10 ,十六进制是 8
9 的二进制是 1001 ,八进制是 11 ,十六进制是 9
A 的二进制是 A ,八进制是 A ,十六进制是 A
BB 的二进制是 BB ,八进制是 BB ,十六进制是 BB
100 的二进制是 1100100 ,八进制是 144 ,十六进制是 64
转换只能在元素进行,如果对整个数组进行转换,则原封不动返回该数组
toLocaleString
返回本地格式字符串,主要用在Date对象上
var a = new Date();
document.write(a.toString());    // -> Sat Aug 8 17:28:36 UTC+0800    2009
document.write(a.toLocaleString());   // -> 2009年8月8日 17:28:36
document.write(a.toLocaleDateString());   // -> 2009年8月8日
区别在于,toString()返回标准格式,toLocaleString()返回本地格式完整日期(在【控制面板】>>【区域和语言选项】,通过修改[时间]和[长日期]格式),toLocaleDateString()跟toLocaleString()一样,只是少了时间
valueOf
根据不同对象返回不同原始值,用于输出的话跟toString()差不多,但是toString()是返回string类型,而valueOf()是返回原对象类型
var a = [1,2,3,[4,5,6,[7,8,9]]];
var b = new Date();
var c = true;
var d = function(){
alert("sunnycat");
};
document.write(a.valueOf());    // -> 1,2,3,4,5,6,7,8,9
document.write(typeof (a.valueOf()));  // -> object
document.write(b.valueOf());    // -> 1249874470052
document.write(typeof(b.valueOf()));  // -> number
document.write(c.valueOf());    // -> true
document.write(typeof(c.valueOf()));  // -> boolean
document.write(d.valueOf());    // -> function () {    alert("sunnycat"); }
document.write(typeof(d.valueOf()));  // -> function
数组也是对象,所以typeof  (a.valueOf())返回object,返回的依然是个多维数组
var a = [1,2,3,[4,5,6,[7,8,9]]];
var aa = a.valueOf();
document.write(aa[3][3][1]); // -> 8
Date对象返回的是距离1970年1月1日的毫秒数,
Math和Error对象没有valueOf方法
 

MangoHost Copyright © 2009 Cookiez is Designed by Ipietoon for Free Blogger Template