2013年8月19日 星期一

Microsoft Chart Controls for Microsoft .NET Framework 3.5 範例

最近在測 Microsoft Chart Controls
所以在這邊記錄一下測過的東東

.aspx
<asp:Chart ID="Chart1" runat="server" Height="500px" Width="1000">
</asp:Chart>
.cs
using System.Web.UI.DataVisualization.Charting;

List<string> XLabels = new List<string>();
List<double> YValues = new List<double>();

XLabels.Add("2013/08/01");
XLabels.Add("2013/08/08");
XLabels.Add("2013/08/15");
YValues.Add(21030.0);
YValues.Add(45121.0);
YValues.Add(45481.0);

Chart1.ChartAreas.Add(new ChartArea());
//繪圖區背景顏色
Chart1.ChartAreas[0].BackColor = System.Drawing.Color.LightGreen;  
//圖表名稱
Chart1.Titles.Add("測試圖表");
//X軸說明
Chart1.ChartAreas[0].AxisX.Title = "日期";  
//X軸各數點間區塊隔行變色
Chart1.ChartAreas[0].AxisX.IsInterlaced = true;  
//X軸邊界不留空格
Chart1.ChartAreas[0].AxisX.IsMarginVisible = false;
//X軸刻度(控制X軸最多10個刻度)
Chart1.ChartAreas[0].AxisX.Interval = Math.Ceiling(XLabels.Count / 10.0);
//Y軸說明
Chart1.ChartAreas[0].AxisY.Title = "金額";  
//Y軸刻度  
Chart1.ChartAreas[0].AxisY.Interval = 10000;
//Y軸刻度加上千分位
Chart1.ChartAreas[0].AxisY.LabelStyle.Format = "#,##0";

//增加圖示
Chart1.Legends.Add(new Legend());
//圖示位置(上方)
Chart1.Legends[0].Docking = Docking.Top;
//圖示位置(中間)
Chart1.Legends[0].Alignment = System.Drawing.StringAlignment.Center;  

//數線名稱(會顯示在圖示中)
Chart1.Series.Add("每週變化");
//數線顏色
Chart1.Series[0].Color = System.Drawing.Color.Red;
//數線類型  
Chart1.Series[0].ChartType = SeriesChartType.Line;
//數線寬度
Chart1.Series[0].BorderWidth = 3;  

//數點形狀
Chart1.Series[0].MarkerStyle = MarkerStyle.Circle;
//數點大小
Chart1.Series[0].MarkerSize = 12;  
//數點顏色
Chart1.Series[0].MarkerColor = System.Drawing.Color.Red;
//在數點上顯示Y軸值
Chart1.Series[0].IsValueShownAsLabel = true;

//數點說明文字顏色
Chart1.Series[0].LabelForeColor = System.Drawing.Color.Blue;
//數點說明背景顏色
Chart1.Series[0].LabelBackColor = System.Drawing.Color.Yellow;
//數點說明加上千分位
Chart1.Series[0].LabelFormat = "#,##0";

//繫結XY座標值-方法1
Chart1.Series[0].Points.DataBindXY(XLabels, YValues);

/* 繫結XY座標值-方法2
for (int k = 0; k < XLabels.Count; k++)
{
   DataPoint newDP = new DataPoint(k, YValues[k]);
   newDP.AxisLabel = XLabels[k];
   Chart1.Series[0].Points.Add(newDP);
}
*/


2013年7月18日 星期四

JDE 程式開發新發現

將自己新發現的一些東東記錄於此
測試環境: JDE 9.0

1)
R程式各Section中, 每種Level-Break條件只能建立1個Level-Break Footer, 如果超過 1個, 僅有其中 1個Level-Break Footer能正常顯示
(Level-Break條件意指: Level-Break的欄位組合; 推測Level-Break Header相同)

2)
Business View可以 Join 5個 tables

3)
R程式的Vocabulary Override存在F98760中

ASP.NET 透過 Microsoft.Office.Interop.Excel 開啟 Excel 的權限設定

這幾天用 ASP.NET 透過 Microsoft.Office.Interop.Excel 開啟 Excel
一直遇到問題
所以在這邊稍微整理一下

1.設定元件服務 > Microsoft Excel Application


2.安全性 > 啟動和啟用權限
要加入IIS 帳號能夠本機啟動/遠端啟動/本機啟用/遠端啟用


3.安全性 > 存取權限
要加入IIS 帳號能夠本機存取


4.識別身分
要設定為互動式使用者


如果都不設定,會出「具有 CLSID {00024500-0000-0000-C000-000000000046} 的元件擷取 COM Class Factory 失敗: 80070005。」錯誤

只設定2,會出「Microsoft Office Excel 無法存取檔案 'xxxxx.xls'。可能原因如下: ‧檔案的名稱或路徑不存在。 ‧這個檔案正被其他程式所使用中。 ‧您要儲存的活頁簿名稱與現有開啟的活頁簿名稱相同。」錯誤

只設定3,會出「具有 CLSID {00024500-0000-0000-C000-000000000046} 的元件擷取 COM Class Factory 失敗: 80070005。」錯誤

只設定4,會出「具有 CLSID {00024500-0000-0000-C000-000000000046} 的元件擷取 COM Class Factory 失敗: 80070005。」錯誤

只設定2和3,會出「Microsoft Office Excel 無法存取檔案 'xxxxx.xls'。可能原因如下: ‧檔案的名稱或路徑不存在。 ‧這個檔案正被其他程式所使用中。 ‧您要儲存的活頁簿名稱與現有開啟的活頁簿名稱相同。」錯誤

只設定2和4,會出「具有 CLSID {00024500-0000-0000-C000-000000000046} 的元件擷取 COM Class Factory 失敗: 80070005。」錯誤

只設定3和4,會出「具有 CLSID {00024500-0000-0000-C000-000000000046} 的元件擷取 COM Class Factory 失敗: 80070005。」錯誤

P.S.如果是在Web Server上測試
上述Microsoft Office Excel 無法存取檔案... 錯誤可能會替換為:
「伺服器丟出一個例外。(發生例外狀況於HRESULT: 0x80010105(RPC_E_SERVERFAULT))」

IIS 帳號 :
IIS6 = Network Service
IIS7.5 = IIS APPPOOL\應用程式集區名稱

我的測試環境:
Windows7, IIS7.5, Office2007

參考資料:
1.職人大-[ASP.net/MSSQL] 讀寫Office Excel之前要做的相關設定
2.保哥-介紹 IIS 7.5 的應用程式集區與新增的「虛擬帳戶」特性