2010年8月31日 星期二

ASP 操作 Excel 簡單範例 (三)

補充一些小東東

<%
   '// A1~C1 合併放入 "Header" 字樣
   Set HeaderRange = xlSheet.Range("A1:C1")
   HeaderRange.MergeCells = true
   xlSheet.Cells(1,1) = "Header"

   '// 設定A1背景色 (15=淺灰色)
   Set MergeHeaderRange = xlSheet.Range("A1")
   MergeHeaderRange.Interior.ColorIndex = 15

   '// 設定第一行為日期格式
   Set AColRange = xlSheet.Range("A:A")
   AColRange.NumberFormatLocal = "yyyy/mm/dd"

   '// 隱藏第四行
   Set DColRange = xlSheet.Range("D:D")
   DColRange.Columns.Hidden = true

   '// 將第一列凍結視窗
   xlSheet.Cells(2,1).Select
   xlApp.ActiveWindow.FreezePanes = true
%>

參考前篇:ASP 操作 Excel 簡單範例(二)

T-SQL Like 的小玩意兒

偶然發現 T-SQL Like 的一個小玩意兒
所以記錄一下

SELECT * FROM TableA
WHERE Col1 LIKE '[TB]est%' --查詢出來以 'Test' 開頭或 'Best' 開頭的資料

在一些情況下, 善用這個方式, 就不用一直 LIKE OR LIKE 了

2010年8月26日 星期四

ASP Function Variable

最近 ASP 自訂 Function 的結果不如預期
測了一下, 發現是 Variable 的問題
所以記錄一下

<%
   function BadFunction(a)
      Dim a1
      a1 = a
      a1 = a1 + 1
      BadFunction = a
   end function

   function GoodFunction(a)
      Dim a1
      a1 = a + 1
      GoodFunction = a1
   end function

   Variable_Bad = 2
   Variable_Good = 2
   response.write "Variable_Bad : " & Variable_Bad & "<br>"
   response.write "BadFunction : " & BadFunction(Variable_Bad) & "<br>"
   response.write "Variable_Bad : " & Variable_Bad & "<br>"
   response.write "Variable_Good : " & Variable_Good & "<br>"
   response.write "GoodFunction : " & GoodFunction(Variable_Good) & "<br>"
   response.write "Variable_Good : " & Variable_Good & "<br>"
%>

輸出如下:
Variable_Bad : 2
BadFunction : 3
Variable_Bad : 3                      ---> function 外的變數也被改變了
Variable_Good : 2
GoodFunction : 3
Variable_Good : 2

依結果看來
變數似乎是傳址 (Call by address), 而非傳值 (Call by value)
以致於如果 function 內直接對 input 變數做任何異動時
function 外的變數也會隨之改變

所以最好宣告另一個變數, 儲存 input 變數處理後的結果
不要直接處理 input 變數...

2010年8月24日 星期二

ASP.NET 以 Stream 方式下載 Excel

ASP.NET 轉存 Excel
可以先使用 Microsoft Office.Interop.Excel 元件產生並另存 Excel
再利用 Stream 方式將新建的 Excel 供使用者下載

下面是以 Stream 方式下載已存在的 Excel  的 Sample Code :
protected void OutputExcel(Excel_RelPath)
{
   string Excel_PhyPath = Server.MapPath(Excel_RelPath);
   FileInfo fi = new FileInfo(Excel_PhyPath );
   if (fi.Exists)
   {
      FileStream fs = new FileStream(ExcelName, FileMode.Open);
      long FileSize = fs.Length;

      // 將 Excel 內容以 Binary 方式存入 Buffer 變數
      byte[] Buffer = new byte[(int)FileSize];
      fs.Read(Buffer, 0, (int)FileSize);
      fs.Close();

      Response.AddHeader("Content-Disposition", "attachment;
         filename=" + fi.Name);
      Response.ContentType = "application/octet-stream";

      Response.BinaryWrite(Buffer);
      Response.Flush();
   }
}

2010年8月3日 星期二

ASP 操作 Excel 簡單範例 (二)

又遇到一些新東東
查得我死去活來
所以在這邊記錄一下

<%
   ' 建立圖表 left:10, top:10, width:640, height:320
   Set MyChart = xlApp.ActiveSheet.ChartObjects.Add(10,10,640,320)

   ' 圖表類型為資料標記折線圖
   MyChart.Chart.ChartType = 65

   ' /* 設定圖表資料來源 */
   ' [參數1]: 資料範圍
   ' [參數2]: 1代表以列取數列 / 2代表以欄取數列
   MyChart.Chart.SetSourceData xlSheet.Range("A1:D10"),2

   ' /* X軸文字以日期格式顯示, 字型大小8 */
   ' [參數]: XlAxisType, 1代表xlCategory(X軸) / 2代表xlValue(Y軸)
   Set XAxes = MyChart.Chart.Axes(1)
   XAxes.TickLabels.NumberFormat = "m/d"
   XAxes.TickLabels.Font.Size = 8

   ' Y軸文字字型大小8
   Set YAxes = MyChart.Chart.Axes(2)
   YAxes.TickLabels.Font.Size = 8

   ' /* 圖示置上, 字型大小8 */
   ' [Position參數]: XlLegendPosition
   MyChart.Chart.Legend.Position = -4160
   MyChart.Chart.Legend.Font.Size = 8

   ' 移除多餘的數列
   MyChart.Chart.SeriesCollection(3).Delete
   MyChart.Chart.SeriesCollection(1).Delete

   ' /* 設定數列顏色 */
   ' 設定數列線條為紅色(ColorIndex=3)
   MyChart.Chart.SeriesCollection(1).Border.ColorIndex=3
   ' 設定數列前景色為黑色(ColorIndex=1)
   MyChart.Chart.SeriesCollection(1).MarkerForegroundColorIndex=1
   ' 設定數列背景色為紅色(ColorIndex=3)
   MyChart.Chart.SeriesCollection(1).MarkerBackgroundColorIndex=3
%>

參考資料:
Chart Type Enumeration : Toolbox.com
XlAxisType Enumeration : MSDN
XlLegendPosition Enumeration : MSDN
ColorIndex : MSDN

參考前篇 : ASP 操作 Excel 簡單範例
參考下篇 : ASP 操作 Excel 簡單範例(三)