搜尋此網誌

2011年8月28日 星期日

Excel 將資料垂直和水平轉置

第一種方式比較簡單,就是將你要轉置的資料複製起來,然後貼到你要轉置的地方,但是貼上時,必須選擇使用轉置的方式貼上。

第二種是透過公式的方式完成轉置,以下圖為例
如果你在 Excel 中取得一個資料表(如上圖左),想要將資料垂直和水平轉置(如上圖右),其實只要一個公式就可以完成:

儲存格F1:=OFFSET($A$1,COLUMN()-6,ROW()-1)

將儲存格F1向右和向下複製即可。

其中公式:=OFFSET($A$1,COLUMN()-n,ROW()-m),m為轉置後的第一個位置(例如:儲存格F1)為第幾欄,n為轉置後的第一個位置(例如:儲存格F1)為第幾列。

OFFSET的語法:OFFSET(reference, rows, cols, [height], [width])

其會傳回根據所指定的儲存格位址、列距及欄距而算出的參照位址。傳回的參照位址可以是單一個儲存格或一個儲存格範圍。您可以指定要傳回來的列數和欄數。

關於OFFSET函數的完整說明,請參閱微軟網站:

2011年8月23日 星期二

2011年8月18日 星期四

讓TextBox限制無法輸入(但是不要唯讀)

<INPUT TYPE="text" NAME="INVOICE_NO_QC" onkeydown="return(false);">

javascript的正則運算式


//校驗是否全由數字組成
function isDigit(s)
{
var patrn=/^[0-9]{1,20}$/;
if (!patrn.exec(s)) return false
return true
}

//校驗登錄名:只能輸入5-20個以字母開頭、可帶數位、“_”、“.”的字串
function isRegisterUserName(s)
{
var patrn=/^[a-zA-Z]{1}([a-zA-Z0-9]|[._]){4,19}$/;
if (!patrn.exec(s)) return false
return true
}

//校驗用戶姓名:只能輸入1-30個以字母開頭的字串
function isTrueName(s)
{
var patrn=/^[a-zA-Z]{1,30}$/;
if (!patrn.exec(s)) return false
return true
}

//校驗密碼:只能輸入6-20個字母、數位、下劃線
function isPasswd(s)
{
var patrn=/^(w){6,20}$/;
if (!patrn.exec(s)) return false
return true
}

//校驗普通電話、傳真號碼:可以“+”開頭,除數字外,可含有“-”
function isTel(s)
{
//var patrn=/^[+]{0,1}(d){1,3}[ ]?([-]?(d){1,12})+$/;
var patrn=/^[+]{0,1}(d){1,3}[ ]?([-]?((d)|[ ]){1,12})+$/;
if (!patrn.exec(s)) return false
return true
}

//校驗手機號碼:必須以數位開頭,除數字外,可含有“-”
function isMobil(s)
{
var patrn=/^[+]{0,1}(d){1,3}[ ]?([-]?((d)|[ ]){1,12})+$/;
if (!patrn.exec(s)) return false
return true
}

//校驗郵遞區號
function isPostalCode(s)
{
//var patrn=/^[a-zA-Z0-9]{3,12}$/;
var patrn=/^[a-zA-Z0-9 ]{3,12}$/;
if (!patrn.exec(s)) return false
return true
}

//校驗搜索關鍵字
function isSearch(s)
{
var patrn=/^[^`~!@#$%^&*()+=|\][]{}:;',.<>/?]{1}[^`~!@$%^&()+=|\][]{}:;',.<>?]{0,19}$/;
if (!patrn.exec(s)) return false
return true
}

function isIP(s) //by zergling
{
var patrn=/^[0-9.]{1,20}$/;
if (!patrn.exec(s)) return false
return true
}


正則運算式
"^\d+$"  //非負整數(正整數 + 0)
"^[0-9]*[1-9][0-9]*$"  //正整數
"^((-\d+)|(0+))$"  //非正整數(負整數 + 0)
"^-[0-9]*[1-9][0-9]*$"  //負整數
"^-?\d+$"    //整數
"^\d+(\.\d+)?$"  //非負浮點數(正浮點數 + 0)
"^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$"  //正浮點數
"^((-\d+(\.\d+)?)|(0+(\.0+)?))$"  //非正浮點數(負浮點數 + 0)
"^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$"  //負浮點數
"^(-?\d+)(\.\d+)?$"  //浮點數
"^[A-Za-z]+$"  //由26個英文字母組成的字串
"^[A-Z]+$"  //由26個英文字母的大寫組成的字串
"^[a-z]+$"  //由26個英文字母的小寫組成的字串
"^[A-Za-z0-9]+$"  //由數位和26個英文字母組成的字串
"^\w+$"  //由數位、26個英文字母或者下劃線組成的字串
"^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$"    //email地址
"^[a-zA-z]+://(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\S*)?$"  //url

2011年8月16日 星期二

JavaScript 和 VBScript 的混用


有時因為種種原因我們想在javascript中實現一些vbscript的功能,例如:想在javascript中去除某個字符串兩邊的空格,這個功能是vbscript的trim函數,可是javascript中卻沒有類似的函數,當然,我們可以自己構造一個函數,但更為簡單的辦法是讓javascript和vbscript混用,實現如下:




<script language=vbscript>
function vbtrimstr(temstr)
vbtrimstr=trim(temstr)
end function
</script>


<script language=javascript>
function trimstr(temstr){
return vbtrimstr(temstr);
}
</script>


又如javascript的alert和confirm方法都不能更改其標題欄的內容,可是vbscript的msgbox函數可以,透過如下的方法就可完成實現:


<script language=vbscript>
function tc()
msgbox "測試測試"
end function
</script>


<script language=javascript>
function javatc(){
tc();
}
</script>


2011年8月12日 星期五

ASP 列出所有session與post進來的值



response.write("session</br>")
for each objitem in session.Contents  
response.write(objitem &"="& session.Contents(objitem) & "</br>")
next
response.write("</br>")

response.write("request</br>")
for each objitem in request.form
response.write(objitem &"="& request.form(objitem) & "</br>")
next
response.write("</br>")

web flow 用的


        <%
response.write("session</br>")
for each objitem in session.Contents  
response.write(objitem & "=" & session.Contents(objitem) & "</br>")
on error resume next
next
        %>


JavaScript 取得目前網址 (以及其他資訊)


假設現在我有個網頁,網址是:http://functionlab.org:80/tools/tcpproxy.php?user=FUNction#showscript
如果這網頁上有以下JavaScript 程式碼

<script type="text/javascript">
    //http://www.w3schools.com/htmldom/dom_obj_location.asp
    document.write("location.href : "+location.href+"<br/>");
    document.write("location.protocol : "+location.protocol+"<br/>");
    document.write("location.hostname : "+location.hostname+"<br/>");
    document.write("location.host : "+location.host+"<br/>");
    document.write("location.port : "+location.port+"<br/>");
    document.write("location.pathname : "+location.pathname+"<br/>");
    document.write("location.search : "+location.search+"<br/>");
    document.write("location.hash : "+location.hash+"<br/>");
</script>


那該網頁會顯示:
location.href : http://functionlab.org:80/tools/tcpproxy.php?user=FUNction#showscript
location.protocol : http
location.hostname : functionlab.org
location.host : functionlab.org:80
location.port : 80
location.pathname : /tools/tcpproxy.php
location.search : ?user=FUNction
location.hash : #showscript

天哪!! 真是方便 :-)

2011年8月11日 星期四

#include file 和 #include virtual的區別

include file 可以用相對路徑或全路徑與文件名的組合來描述

如:file="..\script\my.inc" file="../script/my.inc"
奇怪的是竟然可以 file="../script\my.inc"也通過編譯

他的禁止:是不可以用絕對路徑來表示

如:file="/script/my.inc"

而對virtual可以使用虛抑的絕對路徑來表示

virtual="/yousite/script/my.inc"

2011年8月3日 星期三

t-sql不足的尾數補值方式

類似於 C# string.padleft(4,'0');

@value = RIGHT(REPLICATE('0', 4) + Convert(Nvarchar(10), @value), 4)

t-sql 轉型

convert(decimal, '123')
convert(nvarchar, 123)
or
cast('123' as decimal)
cast(123 as nvarchar)

呼叫stored procedure, 取得回傳值

EXEC [sotred_procedure] @return_value Output

設定Stored Procedure具備回傳值,以及回傳方法

ALTER PROCEDURE [dbo].[CHK_ON_DUTY]
@return_value Nvarchar(max) OUTPUT
AS
BEGIN
SET NOCOUNT ON;
Select @return_value = [columns] From [table]
return
END