在這裡做個筆記, 功能是以名稱排序後, update 欄位中的排序欄位(SORT)
update TABLE1 t set t.SORT =
( select RN
from (select ROW_NUMBER() OVER(ORDER BY NAME) RN ,TABLE1.CODE
from TABLE1
where SYSTYPE='TYPE1'
order by nlssort(NAME,'NLS_SORT=TCHINESE_RADICAL_M')
)
where t.CODE = CODE and t.SYSTYPE = SYSTYPE
)
where SYSTYPE='TYPE1'
紀錄一下~
本丸的世界
2018年8月14日 星期二
林口通勤到台北-不搭機捷的理由
在高速公路還在收回數票的時候,林口的地埋位置就處於泰山收費站之後,每每要到台北就必需付40元,所以住在林口在當時算是不划算的選擇。後來跟著ETC的建置後,這個問題終於落幕。所以林口人就慢慢變多了,如何搭車上班這件事就要好好聰明選擇了。
回憶當時在936,937公車都還沒有的情形下,往返台北的交通工具就是機車。從大科路下山往泰山五股再經過三重到台北...
這樣的輕移民在我們出了一場車禍之後就立馬改為搭公車了。往事真的不堪回首;現在反而覺得可以搭著快速公車,往返台北還有30分鐘可以自由選擇睡覺、滑手機、看書、發呆。
但從期待機捷到現在之所以沒有搭乘的理由其實就是票價,當初的如意算盤打的是以台北車站到捷運淡水站到A9林口站的距離相當;如果又有轉乘和優遊卡折扣,那麼當初選林口的如意算盤算是打的精準。
但是人算不如天算啊,這些都隨著正式通車後破滅了...稍微計算一下
A.搭機捷到台北上班
機捷A1台北站 到 A9林口站 單次票價:80元 通勤時間差不多 32:48 分鐘, 但是你到站後想要再轉搭台北捷運,最快也要5分鐘才能到捷運系統。(在沒有買月票的情形)
(優惠列表:30天30% off,60天35% off,90天 40% off,120天 50% off)
B.搭公車到圓山轉北捷到台北上班
936,937 以未來城社區來計算往圓山捷運站 單次票價:30元 通勤時間差不多 30~50(+-10%)分鐘,但是下車直接到台北捷運紅線。接下來又可以享受30分鐘內轉乘捷運的優惠。(注意因經由高速公路端視路況影響較大)
這樣計算一下往返價格與時間
A.機捷 80+80+(北市捷運票價) 至少 160+起跳 | 時間32+ (若以買最優惠120天優惠計算,5折80元)
B.公車 30+(北市捷運票價及轉乘優惠)|時間30~50(+-10%) (正常情況下)
以為我實例:在西門町上班我
A.160+20=180 來回->360 (若以買最優惠120天優惠計算,5折80+20=100元)
B.30+12=42 來回->84 (若以買最1280優惠計算,(1280/22=58)+20=78元)
還可以踏UBIKE健身。(前30分鐘免費)
價差可以自己算算看, 在時間上我是覺得沒有比想像中差很多, 所以我目前就妥協於價格考量。
再以一個月22天來計算一下,更會有感。尤其現在1280公車捷運搭到飽的情況下,84*22=1848-1280=568 更可以省下來。
所以聰明的你/妳, 會怎麼選擇呢?
大家其實都很精打計算的~現在936,937搭公車的人愈來愈多了, 到時候社會住宅那2000多戶如果都住滿滿的,到最後又會是怎樣的情形呢? 再來打算吧~
回憶當時在936,937公車都還沒有的情形下,往返台北的交通工具就是機車。從大科路下山往泰山五股再經過三重到台北...
這樣的輕移民在我們出了一場車禍之後就立馬改為搭公車了。往事真的不堪回首;現在反而覺得可以搭著快速公車,往返台北還有30分鐘可以自由選擇睡覺、滑手機、看書、發呆。
但從期待機捷到現在之所以沒有搭乘的理由其實就是票價,當初的如意算盤打的是以台北車站到捷運淡水站到A9林口站的距離相當;如果又有轉乘和優遊卡折扣,那麼當初選林口的如意算盤算是打的精準。
但是人算不如天算啊,這些都隨著正式通車後破滅了...稍微計算一下
A.搭機捷到台北上班
機捷A1台北站 到 A9林口站 單次票價:80元 通勤時間差不多 32:48 分鐘, 但是你到站後想要再轉搭台北捷運,最快也要5分鐘才能到捷運系統。(在沒有買月票的情形)
(優惠列表:30天30% off,60天35% off,90天 40% off,120天 50% off)
B.搭公車到圓山轉北捷到台北上班
936,937 以未來城社區來計算往圓山捷運站 單次票價:30元 通勤時間差不多 30~50(+-10%)分鐘,但是下車直接到台北捷運紅線。接下來又可以享受30分鐘內轉乘捷運的優惠。(注意因經由高速公路端視路況影響較大)
這樣計算一下往返價格與時間
A.機捷 80+80+(北市捷運票價) 至少 160+起跳 | 時間32+ (若以買最優惠120天優惠計算,5折80元)
B.公車 30+(北市捷運票價及轉乘優惠)|時間30~50(+-10%) (正常情況下)
以為我實例:在西門町上班我
A.160+20=180 來回->360 (若以買最優惠120天優惠計算,5折80+20=100元)
B.30+12=42 來回->84 (若以買最1280優惠計算,(1280/22=58)+20=78元)
還可以踏UBIKE健身。(前30分鐘免費)
價差可以自己算算看, 在時間上我是覺得沒有比想像中差很多, 所以我目前就妥協於價格考量。
再以一個月22天來計算一下,更會有感。尤其現在1280公車捷運搭到飽的情況下,84*22=1848-1280=568 更可以省下來。
所以聰明的你/妳, 會怎麼選擇呢?
大家其實都很精打計算的~現在936,937搭公車的人愈來愈多了, 到時候社會住宅那2000多戶如果都住滿滿的,到最後又會是怎樣的情形呢? 再來打算吧~
2018年2月7日 星期三
[程式類]Aspose如何將樣板WORD插入多筆來自資料庫(Blob)的圖片
Aspose word是一個非常好用的文件產生器, 像是要在本文填入文字, 就要利用WORD
按一下 [插入] > [快速組件] > [功能變數]。
![[快速組件] 功能表上的 [插入功能變數] 選項。 [快速組件] 功能表上的 [插入功能變數] 選項。](https://support.content.office.net/zh-tw/media/6af026f9-51a8-4df0-9524-53c50575a5d1.png)
在左方功能變數名稱選擇MergeField, 在欄位名稱填入例如: NAME 後按下確定
DataTable mainTbHeader = new DataTable();
mainTbHeader.Columns.Add("NAME");
DataRow mainDr = mainTbHeader.NewRow();
mainDr["NAME"] = "NAME1";
mainTbHeader.Rows.Add(mainDr);
docTemplate.MailMerge.Execute(mainTbHeader);
docTemplate.Save(ExportFile);
這樣檔案裡就會照著你的意思,有一文字ASPOSE。
以上為Aspose裡插入文字時的做法。
那如果是多筆文字的話在Word Tamplate要使用TableStart/TableEnd 如下所示:
«TableStart:NameList»
«Name»
«TableEnd:NameList»
在程式中
DataTable NameList = new DataTable("NameList");
NameList.Columns.Add("Name");
// set row data
DataRow dr = NameList.NewRow();
dr["Name"]="Name1";
NameList.Rows.Add(dr);
dr["Name"]="Name2";
NameList.Rows.Add(dr);
ds.Tables.Add(NameList );
docTemplate.MailMerge.ExecuteWithRegions(ds);
這樣便可以將多筆資料內容,一筆一筆的填入。
重點來了, 本旨想要解釋的圖片呢?
Word Tamplate要使用Table,這一點和上面多筆文字內容一樣要使用table, 但是在Word的功能變數內容有些不同。如果是圖面要使用[Image:]這個特別的識別Tag
«TableStart:NAMELIST»
«NAME»
«Image:Picture»
«TableEnd:NAMELIST»
在程式中
DataTable NameList = new DataTable("NameList");
NameList.Columns.Add("Name");
NameList.Columns.Add("Picture", typeof(Byte[]));// Byte Image
// set row data
DataRow dr = NameList.NewRow();
dr["Name"] = "Name1";
byte[] myByteArray = GetImageFile(PK); //try to get the Image file
dr["Picture"] = myByteArray;
NameList.Rows.Add(dr);
dr["Name"] = "Name2";
byte[] myByteArray = GetImageFile(PK2); //try to get the Image file
dr["Picture"] = myByteArray;
NameList.Rows.Add(dr);
ds.Tables.Add(NameList);
docTemplate.MailMerge.ExecuteWithRegions(ds);
//this part for Bind Image
DocumentB起彼落uilder builder = new DocumentBuilder(docTemplate);
ReportingEngine engine = new ReportingEngine();
engine.BuildReport(docTemplate, ds, "ds");
請加入此Class
public class HandleMergeImageFieldFromBlob : IFieldMergingCallback
{
void IFieldMergingCallback.FieldMerging(FieldMergingArgs e)
{
}
/// <summary>
/// This is called when mail merge engine encounters Image:XXX merge field in the document.
/// You have a chance to return an Image object, file name or a stream that contains the image.
/// </summary>
void IFieldMergingCallback.ImageFieldMerging(ImageFieldMergingArgs e)
{
if (e.FieldValue == null || e.FieldValue is System.DBNull) return;
// The field value is a byte array, just cast it and create a stream on it.
MemoryStream imageStream = new MemoryStream((byte[])e.FieldValue);
// Now the mail merge engine will retrieve the image from the stream.
e.ImageStream = imageStream;
e.ImageHeight.Value = 166;
e.ImageWidth.Value = 250;
}
}
按一下 [插入] > [快速組件] > [功能變數]。
![[快速組件] 功能表上的 [插入功能變數] 選項。 [快速組件] 功能表上的 [插入功能變數] 選項。](https://support.content.office.net/zh-tw/media/6af026f9-51a8-4df0-9524-53c50575a5d1.png)
在左方功能變數名稱選擇MergeField, 在欄位名稱填入例如: NAME 後按下確定
«NAME»
這是WORD裡的功能變數裡的顯示。
這是WORD裡的功能變數裡的顯示。
而在程式裡C#為例:
Document docTemplate = new Document(ExportFile);DataTable mainTbHeader = new DataTable();
mainTbHeader.Columns.Add("NAME");
DataRow mainDr = mainTbHeader.NewRow();
mainDr["NAME"] = "NAME1";
mainTbHeader.Rows.Add(mainDr);
docTemplate.MailMerge.Execute(mainTbHeader);
docTemplate.Save(ExportFile);
這樣檔案裡就會照著你的意思,有一文字ASPOSE。
以上為Aspose裡插入文字時的做法。
那如果是多筆文字的話在Word Tamplate要使用TableStart/TableEnd 如下所示:
«TableStart:NameList»
«Name»
«TableEnd:NameList»
在程式中
DataTable NameList = new DataTable("NameList");
NameList.Columns.Add("Name");
// set row data
DataRow dr = NameList.NewRow();
dr["Name"]="Name1";
NameList.Rows.Add(dr);
dr["Name"]="Name2";
NameList.Rows.Add(dr);
ds.Tables.Add(NameList );
docTemplate.MailMerge.ExecuteWithRegions(ds);
這樣便可以將多筆資料內容,一筆一筆的填入。
重點來了, 本旨想要解釋的圖片呢?
Word Tamplate要使用Table,這一點和上面多筆文字內容一樣要使用table, 但是在Word的功能變數內容有些不同。如果是圖面要使用[Image:]這個特別的識別Tag
«TableStart:NAMELIST»
«NAME»
«Image:Picture»
«TableEnd:NAMELIST»
在程式中
DataTable NameList = new DataTable("NameList");
NameList.Columns.Add("Name");
NameList.Columns.Add("Picture", typeof(Byte[]));// Byte Image
// set row data
DataRow dr = NameList.NewRow();
dr["Name"] = "Name1";
byte[] myByteArray = GetImageFile(PK); //try to get the Image file
dr["Picture"] = myByteArray;
NameList.Rows.Add(dr);
dr["Name"] = "Name2";
byte[] myByteArray = GetImageFile(PK2); //try to get the Image file
dr["Picture"] = myByteArray;
NameList.Rows.Add(dr);
ds.Tables.Add(NameList);
docTemplate.MailMerge.ExecuteWithRegions(ds);
//this part for Bind Image
DocumentB起彼落uilder builder = new DocumentBuilder(docTemplate);
ReportingEngine engine = new ReportingEngine();
engine.BuildReport(docTemplate, ds, "ds");
請加入此Class
public class HandleMergeImageFieldFromBlob : IFieldMergingCallback
{
void IFieldMergingCallback.FieldMerging(FieldMergingArgs e)
{
}
/// <summary>
/// This is called when mail merge engine encounters Image:XXX merge field in the document.
/// You have a chance to return an Image object, file name or a stream that contains the image.
/// </summary>
void IFieldMergingCallback.ImageFieldMerging(ImageFieldMergingArgs e)
{
if (e.FieldValue == null || e.FieldValue is System.DBNull) return;
// The field value is a byte array, just cast it and create a stream on it.
MemoryStream imageStream = new MemoryStream((byte[])e.FieldValue);
// Now the mail merge engine will retrieve the image from the stream.
e.ImageStream = imageStream;
e.ImageHeight.Value = 166;
e.ImageWidth.Value = 250;
}
}
訂閱:
文章 (Atom)