發表文章

Coldfusion直接讀取/產生Excel檔案 (使用POI元件)

圖片
最近在 Ben Nadel 先生的網站發現他有個Component計畫,他利用 apache.org 的 poi project 來製作一個可以讀寫 EXCEL 檔案的 Component,操作 EXCEL 檔真的蠻方便的。而且 poi project 以處理 office文件為目標,算是很棒的專案。 正在想如何直接透過 Coldfusion 網頁處理客戶的 Excel 檔案時,這真是一大幫助啊! 請先參考相關連結: apache.org 的 poi 計畫 、  apache poi jar下載 Ben Nadel 的 POIUtility 文章出處 、 Ben Nadel 的 POIUtility 專案 我的環境 本人使用 Railo 3.3.4.003 執行 Coldfusion ,所以核心是 Apache 比較沒有問題,至於Adobe的Coldfusion可能要再研究一下 Ben Nadel 的專案了。 1、下載  JAR 檔案 注意下載的 poi jar 版本,由於我使用的 Railo 3.3.4.003版本無法搭配最新的 poi,所以測試到使用  poi-3.0-FINAL.jar 是沒有問題的,太新的反而不能用。 把下載的 jar 放在 Railo Server 路徑下的 \lib\ext 裡面,重新啟動服務即完成掛載。 2、下載 Ben Nedal 的 POIUtility.cfc 假設網頁運行路徑在 \webroot\ 你可接放在 \webroot\ 而我的測試是放在 \webroot\COM 裡面 (我個人習慣Component都是放在COM路徑下) 3-1、測試一:讀取全部 首先,建立一個 Excel 檔案 "測試活頁簿.xls",裡面有3個Sheet 3-1.1、寫一段讀取用的 script: <!--- 建立並初始化POI物件 ---> <cfset POIobj = CreateObject("component","COM.POIUtility").Init() > <!--- 取得我要測試的Excel檔案路徑. ---> <cfset myFile

Coldfusion 對 query 語句生成

一般的 query 查詢方式 <cfquery name="QryName" DataSource="ConnecttionName"> SELECT field-A,field-B FROM TableName WHERE strfield = '#sdata#' AND numfield = #ndata# AND dtmfield = #parseDatetime(dtdata)# </cfquery> 上面是純粹帶『查詢資料』進去 Query 語句時所使用的方式,SQL語句屬於固定類的, 但若你把它改成動態語句: <cfset qs = "strfield = '#sdata#' AND numfield = #ndata# AND dtmfield = #parseDatetime(dtdata)#"> <cfquery name="QryName" DataSource="ConnecttionName"> SELECT field-A,field-B FROM TableName WHERE #qs# </cfquery> 這個語句絕對會失敗的, 因為 Coldfusion 為了防止 SQL injection 所以會對 生成 SQL語句的變數裡 ' single-quotation 產生escape 字元,導致生成了不是你想像中的語句。 正確的作法,如果你希望使用動態語句生成,那就是加個指令要求ColdFusion不要去處理 single-quotation 問題即可解決: <cfset qs = "strfield = '#sdata#' AND numfield = #ndata# AND dtmfield = #parseDatetime(dtdata)#"> <cfquery name="QryName" DataSource="ConnecttionName"> SELECT fi

Coldfusion 來自不同資料庫的join作法

Coldfusion server 提供了許多資料庫的Native Connection方式,或是Jconnect的方式,在我認為效率總是比ODBC好多了,所以我寫的網頁常常遊走在不同資料庫上,我最常用的資料庫不外乎Sybase ASE 與 MS SQL (或是更早的MSDE)這兩種資料庫,所以需要用到兩種BD來源的Table需要Join的問題: 這技術需要用到 inMemory Query 的作法就可以達成 首先從各資料庫先取出需要 join 的資料(可以盡量使用篩選過的,減少記憶體用量) <cfquery name="emp" datasource="SYB_CONN"> SELECT empl_no,empl_name,title_no FROM rmployee WHERE depart_no = 'sales' </cfquery> <cftransaction action="commit" /> <cfquery name="ttl" datasource="MSSQL_CONN"> SELECT title_no,title_name FROM outsider_title WHERE title_kind = 'S' </cfquery> <cftransaction action="commit" /> Join 兩邊的資料源 <cfquery name="emptlo" dbtype="query"> SELECT a.empl_name,b.title_name FROM emp a, ttl b WHERE a.title_no = b.title_no </cfquery> 輸出測試 <cfloop query="emptlo"> <cfoutput>#empl_name# , #title_name# <br /></cfou

jQuery設定/變更select物件預設值的方法

寫網頁服務最討厭的一件事就是:各種瀏覽器的DOM生成方式不同,導致認為可以的反應卻沒預期發生... 就說 HTML 裡面的 select 這個物件吧 <select id="SelectID">   <option value="A" selected="selected">單位A</option>   <option value="B">單位B</option>   <option value="C">單位C</option> </select> 當我想要 設定 select 預設值時,可以用下面幾種方式: $('#SelectID')[0].selectedIndex = 1; //選取第二個欄位 單位B (索引從0開始) $('#SelectID').get(0).selectedIndex = 1; //效果同上 $('#SelectID').val(selectedValue); //selectedValue是變數,裡面是select option其中一個的value值 $('#SelectID').val('B') //選擇第二欄位,效果同上 $('#SelectID option').filter('[value="'+selectedValue+'"]').attr("selected",true); //filter選項後設定屬性 想要 取得 其選擇值時可以用: var dataValue = $('#SelectID').val();  //取得被選項目的value var dataValue = $('#SelectID').find('option:selected').val(); //效果同上,問題比較少 var dataText = $('#SelectID')

用VBscript定時刪除暫存檔案

有很多時候系統因為查詢的關係會產生很多暫存檔案,然而若是系統本身沒有暫存檔管理功能的話,漸漸的暫存檔就會消耗硬碟空間,嚴重的話會導致作業系統空間不足而將服務給停止,因此定期刪除這些暫存檔案的技巧是管理的基本常識 所以寫一隻可以幫忙有條件清除的程序是很重要的。 檔案:Time2Delete.vbs 內容: ' 指定所有變數必須事先宣告才能使用 Option Explicit 'WScript.Echo("作業開始執行:" & Date & " " & Time) ' 宣告變數 Dim FSO, agoMins, modifiedDate, delFolder ' 請將下面的變數值換成你要的 ' == 開始 == ' 指定 n 分鐘前的檔案,現在是 15 分前 agoMins = 15 ' 欲刪除檔案所在之目錄 delFolder = "C:\inetpub\wwwroot\tempfile" ' == 結束 == ' 建立檔案系統物件(File System Object) Set FSO = CreateObject("Scripting.FileSystemObject") ' 取得檔案的修改時間 modifiedDate = DateAdd("n", -agoMins, Date) ' 呼叫刪除檔案的子程序 DelFilesInFolder FSO.GetFolder(delFolder) ' 刪除檔案的子程序 Sub DelFilesInFolder(folder) ' 宣告變數 Dim file, subFolder ' 找出目前所在目錄內所有的檔案 For Each file In folder.Files ' 檢查檔案日期是否符合條件,若符合,就刪除 If ((file.DateLastModified <= modifiedDate)) Then 'normal=0,readonly=1,hideen=2,system=4,Volume=8,Direc

用VBscript取得每一層資料夾底下的儲存容量

檔案:CheckSpaceUsed.vbs 內容: ' 指定所有變數必須事先宣告才能使用 Option Explicit 'WScript.Echo("作業開始執行:" & Date & " " & Time) ' 宣告變數 Dim FSO, chkFolder, vbcrlf, logf ' == 開始 == vbcrlf = chrB(13) & chrB(10) ' 檔案所在之目錄 chkFolder = "C:\FTPROOT\UPLOAD" ' 建立檔案系統物件(File System Object) Set FSO = CreateObject("Scripting.FileSystemObject") ' 建立紀錄檔案 Set logf = FSO.CreateTextFile("Csize.csv", True) ' 取得目錄層所有的資料夾,目錄層下的檔案不處理 FatchFolder FSO.GetFolder(chkFolder) '關閉記錄檔 logf.Close '取得清單子程序 Sub FatchFolder(path1) Dim fid, xsize, bs, axx '找出主資料夾下的資料夾清單 For Each fid In path1.SubFolders bs = "B" ' 呼叫統計檔案大小的子程序 xsize = CalFilesInFolder(fid) axx = fid.name & "," & Cstr(xsize) '計算 BYTE單位(最多到MB即可) If(xsize > 1024)then xsize = CLng(xsize / 1024) bs = "KB" End If If(xsize > 1024)then xsize = CLng(xsize / 1024) bs = "MB&quo

coldfusion send email (1): only text or html

Coldfusion 發送簡易電子郵件的方法: 使用 cfmail 標籤指令 純文字模式 <cfmail   to="recipient1@mail.domain.com,recipient2@mail.domain.com"   from="sender@mail.mydomain.com"   subject="顧客意見反映"   server="mail.mydomain.com"   username="MySmtpAccount"   password="MyPassword"   type=" text "> 本訊息由網頁『顧客意見』發出,請勿回覆此信件。#chr(13)##chr(10)# 發訊時間 :#DateFormat(NOW() , 'yyyy/mm/dd')# #TimeFormat(NOW() , 'HH:mm:ss')# 發訊人姓名:#SenderName##chr(13)##chr(10)# 發訊人電話:#SenderTEL##chr(13)##chr(10)# 發訊人郵件:#SenderMail##chr(13)##chr(10)# = = = = = = = = = = = = = = = = = = = = #MailBodyText# </cfmail> HTML模式 <cfmail   to="recipient1@mail.domain.com,recipient2@mail.domain.com"   from="sender@mail.mydomain.com"   subject="顧客意見反映"   server="mail.mydomain.com"   username="MySmtpAccount"   password="MyPassword"   type=" html "> <div styl