發表文章

匯入ODS格式的資料 (C# / ODF)

因應國發會推動ODF-CNS15251格式,所有有資料交換的電子文書格式,亦須逐漸改以ODF格式為主。 在ODF中,對應Excel的檔案格式是.ODS。 要讀入資料,流程大概是: 1.將檔案讀入寫到某暫存目錄 2.將該檔案資料流讀出來,解壓縮,提取當中的 content.xml 程式參考自Gunnar Peipman的範例。 http://gunnarpeipman.com/2012/08/reading-opendocument-spreadsheets-using-c/ 3.利用Linq to XML 把當中的資料列、儲存格讀出來,轉換格式以供後續使用。 ※範例中的Uploader方法只是為了上傳與取得檔名,請用您自己的程式替代,以免無法執行。 ※範例最下方 還有一個  class 叫做 ODFParser,用來解析出ODF壓縮檔內的xml, 它用到 ICSharpCode.SharpZipLib.Zip 這個套件,但是執行效率似乎不佳。

C# 在Asp.net 中將DataTable匯出成Excel檔案

將資料庫中的數值匯出Excel,應該是超經典的入門習題之一。 若使用套件有很多方法可達成,這裡討論的是純粹使用oleDB的作法。 手邊以往的程式是從C#改寫成VB.net的版本,但現在改寫為C#,原來的版本卻找不著了,只好重新來過。 在環境部屬上,要考慮.net的應用程式集區必須調整為 32位元,不然會不能執行。 程式上,首先要引入 using System.Data; using System.Data.OleDb; using System.Data.SqlClient; 接著是連線字串。 因為使用單位還是用舊版excel,因此用以下的古早寫法。系統會在指定的路徑中產生空白的Excel檔。 string Xlsstr = String.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=\"Excel 8.0;HDR=NO\"", path + filename); 然後建立一個 OldDB的連線,組出 Create Table 的語法,將TableSchema塞進去。 using (OleDbConnection XlsConn = new OleDbConnection(Xlsstr)) { .... //組合出 strCreate字串 OleDbCommand command = new OleDbCommand(strCreate, XlsConn); command.ExecuteNonQuery(); } 這當中有一些要注意的細節: (1) 如果要對欄位動手腳、客製化欄位名稱,一定要在建立Table字串的這個地方處理。很奇怪,在後面的程式碼無法再改欄位名稱。 此外,資料庫欄位一般是存英文欄位名稱,但客戶要求的卻是顯示中文表頭。 當然也可以用Select sid as [學號]的方式處裡,但是程式碼不容易維護。 這裡嘗試的方法,是另外去抓資料表欄位內預先定義好的擴充屬性。範例程式碼中是用迴圈一筆筆去找,日後應該可以整個抓回來放在DT或陣列裡,用更節省資源的方法處理。  @"SELECT   value         ...

料理屋塚乃家與鐵路便當

昔日新竹有一處饒富盛名的日式料理屋塚乃家(又作塚迺家) ,最遲於明治31年就已營業。它開在新竹火車站對面,在鐵道運輸取代以往南北往來的官道之後,可謂位於新竹的玄關;官吏送往迎來不用長途跋涉,佔有地利之便。再加上供應的是地方上為數不多的純日本式料理,又有正港日本來的內地女侍,可能也是來往的日本人,消解鄉愁的管道吧。可以讓日本人心情很好,無怪乎生意很好。 明治36年「旅團對抗」(類似後來我們的師對抗,我一直很懷疑這是不是「白團」後來教給國軍....),報紙講得很明白,此時的大演習就是刻意演給台灣人看的,要顯示帝國的威光。當時演習統監部(今日的統裁部)很妙,就設在塚乃家 。 五年理「番」計畫打得如火如荼(灰頭土臉),討蕃凱旋,要在塚乃家請吃飯 。 開股東會(新竹製腦),毫不意外要在塚乃家辦。 有總督府局長(含)以上等級人員來訪,更是得在塚乃家。否則若是無法賓主盡歡,就慘了。 當時視察行程的定番(如大正四年  內田嘉吉 到訪),大約是從新竹車站下車後,先參觀若干特色產業(通草帽席、芳源製酒),優先拚經濟,然後下榻塚乃家。一天以上行程,會到醫院或其他官署參訪,或去學校講講話。然後到地方首屈一指的豪門北門鄭家參訪,或至鄭家位在樹林頭的佛堂─淨業院禮佛。參拜者是否虔誠,無從得知,重點是跟老鄭小鄭交關交關。當事人若無演講或其他行程,則趕往下一站。 參訪者本身不單純是觀看者或是接受招待,也扮演地方當局強有力攏絡體系的一環。鄭家時時有要人貴客到訪,讓鄭家維持自己是高門的「身分感覺」,官方也才能藉此動員鄭家看似近乎無窮的財力。雙方高來高去。 塚迺家就這樣扮演著地方日本人南來北往的樞紐,也是官員與有力者之間的社交空間。 大正十五年,塚迺家發生火災,付之一炬。正好之後鐵道部要整頓火車便當的販售業務( 驛弁 ),新任站長發現前任站長形同特許塚迺家永久營業,要把它換掉。塚迺家的女將很妙,大為不滿: 鐵道草創之初,本店做便當給大家吃,沒有功勞也有苦勞,姐的店剛燒掉手頭緊,需要這筆錢啊。 上面的說法當然是筆者koso後的結果。不過,撇開加油添醋的部分,這論點還是怪怪的對不對?妙的是還有部分「新竹市民」(應該是日本人)跳出來護航。因為,塚乃家對他們而言有特殊的情感,不能讓他倒。事情鬧到新竹警務部長也感覺尷尬,出面協調,後面是否真的換人經營,不得而知。 ...

呂棗娘

阿公阿媽來家裡幫忙顧小孩。為了符合老人家的口味,晚間收視節目也得有所調整,從打打殺殺變成溫馨晨間劇(誤)。 今天重播糸子的洋裝店第一集,女主角對修身教科書中女人要當好媳婦那一套超級賭爛。拜編劇之賜,糸子會像風之谷的Nausicaa姬一樣開外掛,後面有N集可以讓她大展鴻圖揚眉吐氣。可是,每看到這種劇情,我總會忍不住想起《新竹縣採訪冊》裡的呂棗娘,以及她的不幸。 * * * * * * 新竹北門街上的呂家一家有三姊妹,每個都美豔絕倫;棗娘排行老三,特別正。 呂家可收百餘石的租穀,父親卻要姊妹們給人家倚門賣笑,當作搖錢樹。北門大街的富(蒼)戶(蠅)跟老色鬼絡繹不絕前來詢價,這老爹泰然自若還感覺相當良好。想不到連媽媽也加入推入火坑行列。x!這火坑在自己家! 棗娘不肯,哭著說:「別人家的女兒忍辱做所謂「無恥」的事,是迫於生計。可是我們家生活過得去,為什麼非要我像姐姐一樣做那種事?這種孝順,我做不到!」結果當然是被家暴,可是,那年代沒有婦幼保護專線啊。 呂棗娘保護自己的方法,是把自己弄得很可怕(讓我想到金庸小說《連城訣》裡凌知府的女兒....,但我真心希望別那麼慘),然後茹素奉佛閉門不出。結果靠北的是他媽媽雖然表面上百依百順陪著誦經,但仍不放棄對女兒拼命洗腦,早日大賺一筆。我們的主人翁無計可施,最後只能在二十三歲那一年,投繯結束自己的生命。 呂棗娘出殯之日,北門大街上德高望重的李祖琛老杯杯出人意表,特別派家中子侄去上香致意。任何年代都有鄉民,那個年代的也不在話下。大家議論紛紛指指點點,簪纓滿門的士紳之家,跟事主的身分差那麼多,去拈香多怪啊? 結果,老杯杯當街開示:貞節牌坊那套遊戲規則大家都懂,是家族半強迫呢還是當事人貪圖旌表的好處,大家自己心裡有數。老實說,根本也沒甚麼人做得到啦。可是這女孩兒的處境何其艱難,在這麼圈圈叉叉的家庭裡,還要能堅持原則,豈不連七呎大漢也要慚愧嗎? 這是,光緒十九年的事。再沒幾年,日本人就來了。事主後來有沒有獲得旌表,恐怕也無人聞問。 --------------- 呂棗娘,她的堅持是什麼,今日的我們無從得知。不過,貞節牌坊是世家大族的專利。以他的出身,也許她根本從不貪戀甚麼可坊可表、「完大璞以無暇」的考語。 她只是想跟晨間劇的糸子一樣,不想被貼標籤、不想被看笑話,想要有尊嚴,好好的做一回自己。

「竹塹音樂隊」事件

1938年(昭和13年9月21日),新竹火車站前正以隆重儀式歡送某要人。從報紙報導內文以○○○塗銷人名來看,應該是與軍方關係密切的有力人士。  當時,空氣中流洩的應該是「代蒼天伐不義」之類的軍歌才對。結果現場幫忙伴奏的民間團體「竹塹音樂隊」,卻吹了一首「台灣行進曲」。新竹高女的江頭桑發現矛頭不對,但也許是怕場面騷動,也沒有馬上打斷。最後巡查出動,有六名樂隊成員遭到警察調查。照報紙的說法,他們在時局敏感時做出不當舉動,太可惡了。 他們是張萬來、戴順天、林有本、蔡火森、藍慶超,另一名姓名不詳,全是不滿三十歲的年輕人。報紙說他們「抱持著反抗的態度」。  事情有這麼嚴重嗎?「台灣行進曲」並不是甚麼靡靡之音,它可是總督府國民精神總動員本部辦理「海選」挑出來的作品,作者是嘉義大林的三栗谷櫻, 作曲者則是在竹南郡役所上班的作曲素人陳炎興。內容雖未直接提到士兵上場殺敵,但該到山邊海岸當海草、為大君領便當,光榮大東亞,該有的「教化意涵」可是一點不會少。可是,戰爭至上的年代,不論是他們故意、Kuso或搞錯,即使這一點小小的偏差值,也是不被允許的。  這「竹塹音樂隊」跟官方可能還有點小淵源。從前的新竹州教育課長矢野,當過洋樂同好會的(名譽)會長,之前還辦過巡迴推廣。或許這些青年,當時就是講習會的一員,為音樂所著迷。由於「竹塹音樂隊」是新竹唯一的樂隊,在地方各種場合無役不與。這回出事之後,因為樂器是跟市政府借的,這下樂器勢必回收,後續無以為繼;結果六萬新竹市民之中,竟沒有其他表演團體可茲取代。這下換新竹市教育課長傷腦筋了,因為「慶祝」占領漢口、壯行會等儀式,都得要有人吹奏國歌。這種場合若無熟習洋樂而且吹得不錯的人,恐怕會出更大的包。臨時要找樂器湊咖,沒那麼簡單....  拜今日有Google之賜,尋找同名同姓者,張萬來可能是新竹有樂館(即今日影像博物館)的技手,戴順天則跟北門聖教會有淵源。兩者跟西洋文化都有那麼一點關係。日後如有機會,很想再深入了解,這新竹街的六個人,如何喜歡上音樂,又為何敢在那敏感的時機點「一起吹錯」?或是根本是主辦單位給錯曲目,弄巧成拙。 若是好事之徒編出煽情狗血小說,也可以唬爛他們「為了純粹的音樂,鬥魂燃燒而挺身奮戰」,  可是,這樣就不叫歷史了啊。

殖民地台灣近代教育的鏡像─一九三○台灣的教育與社會

殖民地台灣近代教育的鏡像─一九三○台灣的教育與社會 李維修·2016年1月2日  許佩賢教授新付梓的專書《殖民地台灣近代教育的鏡像》(衛城,2015)收錄八篇論文,主題圍繞著日本時代的教育課題而展開。全書內容可概括區分成兩部分:殖民體制下「下對上」與「上對下」的教育想望。全書的下半部四篇文章,探討上對下的殖民地教育力學,以及規訓、教化、整合的體制,也就是「統治技術」的層面。諸如總督府文教政策的外圍功能組織─台灣教育會,以及收音機體操、身體動員與健民運動,乃至於義務教育政策的研擬與實施。但是以魯蛇個人的興趣而言,更關心「下對上」的層面,亦即被統治者求生存的藝術。向來在相關研究中,台灣人的動向模糊難尋,一不小心就會寫成統治者的歷史。礙於文獻中可引申處相當有限,研究者必須「動手動腳找東西」。作者從很零碎的材料中,極力拓展相關研究的深度與廣度,這也是這本書格外可貴之處。   第一篇探討公學校教師的發達之路,講的是一名新竹的公學校教師─張式穀,如何接受新學、逐步蛻變為地方要人的過程 (就筆者自身的認知,若非二二八事件以及之後政治環境的驟變,打亂了地方的生態,張式穀的政壇之路,發展絕對不止於如此)。值得注意的是,張式穀並非紳商出身,但卻有強大的「文化象徵資本」─其父是新竹最有名的塾師張麟書,北門大街的富室大族子弟全是他的同窗,連日本官員也不得不另眼相看。本文訴說一名青年從年少懵懂,接受師範教育後獲提拔為香山庄長,繼而成為實業家、合縱連橫,在「協力」與「反抗」之間走出自己的第三路線。張式穀從學理上雖為殖民當局的「功能性協力者」,但就地方角度而言,他也展現了地方精英追尋社會進步、爭取(教育)資源的自主意識與積極面。   第二篇與第三篇,探討公學校與實業學校畢業生的社會意義。從殖民當局而言,大力整備公學校、提供入學機會,是以最低成本培育農事人才的如意算盤。對一般讀者而言,印象中覺得日本時代的教育「很厲害」、十分普及;事實上,台灣人的就學率,至一九三○年代,也才勉強超過不到五成。這些相對有能力就學的台灣人,心中其實另有盤算:念書是為了「脫農」或擺脫勞動工作,與當局的規劃可說頗有差距。公學校畢業生雖然只具基本學力,但在當時已可算是與眾不同,逐漸成為轉換為受薪階級的入場券。此外,公學校畢業生就讀中學受到諸多限制,反倒是進入高等科甚至再投入實業補習學校的比例...

Powershell初探

李維修 2014.11.21 在Windows Server 平台上,PowerShell是重要的指令化管理工具。以下整理工作中常用的筆記。 原始出處主要參考: 微軟官方(初階): http://technet.microsoft.com/zh-tw/library/bb978526.aspx alexc君之大作: http://ithelp.ithome.com.tw/event/ironmanarticle2/id/20005121/page/3 Hyper-V的 Powershell http://technet.microsoft.com/en-us/library/hh848559.aspx 進階的玩意兒 http://code.tutsplus.com/tutorials/say-hello-to-powershell--net-32056 PowerShell的優點 1.物件導向,每個可執行的語法(  Cmdlet  )的命名都是動詞-名詞,如   Get-Acl, 具結構性,好理解。 2.更容易探索Windows底層資訊(如WMI) 3.改善以往.VBS、bat檔編寫語法不一致的困擾。例如 只要了解 Sort-Object 的用法,就能將大多數 Cmdlet 的輸出排序。 4.可呼叫.net、com,也保留對以往DOS指令的支援。 如何查詢語法與線上說明 Get-help  您要查的 Cmdlet 例如 Get-help get-date 會出現  相關連結     Online version: http://go.microsoft.com/fwlink/?LinkID=113313     Set-Date      New-TimeSpan  註解     若要查看範例,請輸入: "get-help Get-Date -examples".     如需詳細資訊,請輸入: "get-help Get-Date -detailed".     如需技術...