將自己新發現的一些東東記錄於此
測試環境: 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中
2013年7月18日 星期四
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 的應用程式集區與新增的「虛擬帳戶」特性
一直遇到問題
所以在這邊稍微整理一下
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 的應用程式集區與新增的「虛擬帳戶」特性
2013年7月17日 星期三
JDE R程式呼叫 X00022 取號失敗
今天 Copy 一支 R 程式出來修改
結果在執行時發現 X00022 居然沒有取到號
才發現到問題在 R 程式的屬性(Update Report / No Update Report)
如果設定為 No Update Report, 所有Insert/Update/Delete動作都會失效
Copy 出來的 R 程式預設是 No Update Report
如果在 Copy 沒修改, R 程式就是 No Update Report (Read Only)
此時就只能下 SQL Update R 程式屬性
結果在執行時發現 X00022 居然沒有取到號
才發現到問題在 R 程式的屬性(Update Report / No Update Report)
如果設定為 No Update Report, 所有Insert/Update/Delete動作都會失效
Copy 出來的 R 程式預設是 No Update Report
如果在 Copy 沒修改, R 程式就是 No Update Report (Read Only)
此時就只能下 SQL Update R 程式屬性
--版本9.0
--OMIT : 0=Update Report / 1=No Update Report
UPDATE OL900.F9860 SET SIOMIT = '0' WHERE SIOBNM = 'RXXXXXXX';
--OMIT : 0=Update Report / 1=No Update Report
UPDATE OL900.F9860 SET SIOMIT = '0' WHERE SIOBNM = 'RXXXXXXX';
2013年7月3日 星期三
NPOI 2.0 簡易用法
記錄一下 NPOI 2.0 的一些使用筆記
補充 : 在建立儲存格時, 可以定義儲存格的數值格式
NPOI.SS.UserModel.CellType 有下列格式 :
BLANK / BOOLEAN / ERROR / FORMULA / NUMERIC / STRING / Unknown
//建立 Workbook
NPOI.HSSF.UserModel.HSSFWorkbook wb = new NPOI.HSSF.UserModel.HSSFWorkbook();
//建立 MemoryStream
System.IO.MemoryStream ms = new System.IO.MemoryStream();
//建立一個叫做"Sheet1"的 Sheet
NPOI.HSSF.UserModel.HSSFSheet st = (NPOI.HSSF.UserModel.HSSFSheet)wb.CreateSheet("Sheet1");
//產生第一列 (第一列:0, 第二列:1, ...類推)
NPOI.HSSF.UserModel.HSSFRow r1 = (NPOI.HSSF.UserModel.HSSFRow)st.CreateRow(0);
//建立第一列的儲存格格式
NPOI.SS.UserModel.ICellStyle cs1 = wb.CreateCellStyle();
//設定背景色為黑色
cs1.FillPattern = NPOI.SS.UserModel.FillPatternType.SOLID_FOREGROUND;
cs1.FillForegroundColor = NPOI.HSSF.Util.HSSFColor.BLACK.index;
//字型為粗體白字
NPOI.SS.UserModel.IFont fWhiteBold = wb.CreateFont();
fWhiteBold.Boldweight = (short)NPOI.SS.UserModel.FontBoldWeight.BOLD;
fWhiteBold.Color = NPOI.HSSF.Util.HSSFColor.WHITE.index;
cs1.SetFont(fWhiteBold);
//建立第一列的第一格 (A1, 第一格:0, 第二格:1, ...類推)
NPOI.HSSF.UserModel.HSSFCell c1 = (NPOI.HSSF.UserModel.HSSFCell)r1.CreateCell(0);
//設定A1儲存格格式及內容值
c1.CellStyle = cs1;
c1.SetCellValue("Title");
//產生第二列
NPOI.HSSF.UserModel.HSSFRow r2 = (NPOI.HSSF.UserModel.HSSFRow)st.CreateRow(1);
//建立第二列的儲存格格式
NPOI.SS.UserModel.ICellStyle cs2 = wb.CreateCellStyle();
//設定背景色為近似#99FF33 (依NPOI內建顏色為主)
System.Drawing.Color SysColor = System.Drawing.Color.FromArgb(153, 255, 51);
NPOI.HSSF.UserModel.HSSFPalette NPOIPalette = wb.GetCustomPalette();
NPOI.HSSF.Util.HSSFColor NPOIColor = NPOIPalette.FindSimilarColor(SysColor.R, SysColor.G, SysColor.B);
cs2.FillPattern = NPOI.SS.UserModel.FillPatternType.SOLID_FOREGROUND;
cs2.FillForegroundColor = NPOIColor.GetIndex();
//建立第二列的第一格 (A2)
NPOI.HSSF.UserModel.HSSFCell c2 = (NPOI.HSSF.UserModel.HSSFCell)r2.CreateCell(0);
//設定A2儲存格格式及內容值
c2.CellStyle = cs2;
c2.SetCellValue("abcdefgh");
//寫入 Memory
wb.Write(ms);
//設定預設檔名
Response.AddHeader("Content-Disposition", "Book1.xls");
//傳送到 Client
Response.BinaryWrite(ms.ToArray());
//關閉 Workbook
wb = null;
//關閉 Memory
ms.Close();
ms.Dispose();
NPOI.HSSF.UserModel.HSSFWorkbook wb = new NPOI.HSSF.UserModel.HSSFWorkbook();
//建立 MemoryStream
System.IO.MemoryStream ms = new System.IO.MemoryStream();
//建立一個叫做"Sheet1"的 Sheet
NPOI.HSSF.UserModel.HSSFSheet st = (NPOI.HSSF.UserModel.HSSFSheet)wb.CreateSheet("Sheet1");
//產生第一列 (第一列:0, 第二列:1, ...類推)
NPOI.HSSF.UserModel.HSSFRow r1 = (NPOI.HSSF.UserModel.HSSFRow)st.CreateRow(0);
//建立第一列的儲存格格式
NPOI.SS.UserModel.ICellStyle cs1 = wb.CreateCellStyle();
//設定背景色為黑色
cs1.FillPattern = NPOI.SS.UserModel.FillPatternType.SOLID_FOREGROUND;
cs1.FillForegroundColor = NPOI.HSSF.Util.HSSFColor.BLACK.index;
//字型為粗體白字
NPOI.SS.UserModel.IFont fWhiteBold = wb.CreateFont();
fWhiteBold.Boldweight = (short)NPOI.SS.UserModel.FontBoldWeight.BOLD;
fWhiteBold.Color = NPOI.HSSF.Util.HSSFColor.WHITE.index;
cs1.SetFont(fWhiteBold);
//建立第一列的第一格 (A1, 第一格:0, 第二格:1, ...類推)
NPOI.HSSF.UserModel.HSSFCell c1 = (NPOI.HSSF.UserModel.HSSFCell)r1.CreateCell(0);
//設定A1儲存格格式及內容值
c1.CellStyle = cs1;
c1.SetCellValue("Title");
//產生第二列
NPOI.HSSF.UserModel.HSSFRow r2 = (NPOI.HSSF.UserModel.HSSFRow)st.CreateRow(1);
//建立第二列的儲存格格式
NPOI.SS.UserModel.ICellStyle cs2 = wb.CreateCellStyle();
//設定背景色為近似#99FF33 (依NPOI內建顏色為主)
System.Drawing.Color SysColor = System.Drawing.Color.FromArgb(153, 255, 51);
NPOI.HSSF.UserModel.HSSFPalette NPOIPalette = wb.GetCustomPalette();
NPOI.HSSF.Util.HSSFColor NPOIColor = NPOIPalette.FindSimilarColor(SysColor.R, SysColor.G, SysColor.B);
cs2.FillPattern = NPOI.SS.UserModel.FillPatternType.SOLID_FOREGROUND;
cs2.FillForegroundColor = NPOIColor.GetIndex();
//建立第二列的第一格 (A2)
NPOI.HSSF.UserModel.HSSFCell c2 = (NPOI.HSSF.UserModel.HSSFCell)r2.CreateCell(0);
//設定A2儲存格格式及內容值
c2.CellStyle = cs2;
c2.SetCellValue("abcdefgh");
//寫入 Memory
wb.Write(ms);
//設定預設檔名
Response.AddHeader("Content-Disposition", "Book1.xls");
//傳送到 Client
Response.BinaryWrite(ms.ToArray());
//關閉 Workbook
wb = null;
//關閉 Memory
ms.Close();
ms.Dispose();
補充 : 在建立儲存格時, 可以定義儲存格的數值格式
using NPOI.HSSF.UserModel;
HSSFCell c3 = (HSSFCell)r2.CreateCell(1, NPOI.SS.UserModel.CellType.NUMERIC);
HSSFCell c3 = (HSSFCell)r2.CreateCell(1, NPOI.SS.UserModel.CellType.NUMERIC);
NPOI.SS.UserModel.CellType 有下列格式 :
BLANK / BOOLEAN / ERROR / FORMULA / NUMERIC / STRING / Unknown
如何改變DataTable內的資料排序
記錄一下如何改變DataTable內的資料排序
1.使用DataTable.DefaultView.Sort排序
只有在讀取DataTable.DefaultView時, 才會有排序的效果
2.使用DataTable.Select排序, 再將排序好的資料Import到另一個DataTable
直接讀取第2個DataTable(dt3)時, 就會有排序的效果
[Filter] : 直接撰寫SQL Where條件, ex. " COLA = 'A' AND COLB = 'B' "
[Sort] : 直接選寫Order By內容, ex. " COLA,COLB,COLC DESC "
1.使用DataTable.DefaultView.Sort排序
只有在讀取DataTable.DefaultView時, 才會有排序的效果
DataTable dt1 = new DataTable();
/*
填入dt1資料
*/
dt1.DefaultView.Sort([Sort]);
/*
填入dt1資料
*/
dt1.DefaultView.Sort([Sort]);
2.使用DataTable.Select排序, 再將排序好的資料Import到另一個DataTable
直接讀取第2個DataTable(dt3)時, 就會有排序的效果
DataTable dt2 = new DataTable();
DataTable dt3 = new DataTable();
/*
填入dt2資料
*/
//將dt2資料結構複製給dt3
dt3 = dt2.Clone();
foreach DataRow dr in dt2.Select([Filter],[Sort])
{
dt3.ImportRow(dr);
}
dt2.Clear();
DataTable dt3 = new DataTable();
/*
填入dt2資料
*/
//將dt2資料結構複製給dt3
dt3 = dt2.Clone();
foreach DataRow dr in dt2.Select([Filter],[Sort])
{
dt3.ImportRow(dr);
}
dt2.Clear();
[Filter] : 直接撰寫SQL Where條件, ex. " COLA = 'A' AND COLB = 'B' "
[Sort] : 直接選寫Order By內容, ex. " COLA,COLB,COLC DESC "
訂閱:
文章 (Atom)