私のWebサイトが展開されているWebサーバー上にExcelファイルがあります。シナリオ、私は、ユーザーがWebサーバーからExcelファイルをダウンロードし、ローカルドライブに保存し、データをエクスポートするために同じファイルパスを選択できる画面があります。 bt以下のエラーが発生するMicrosoft Interopを使用してExcelセルを読み書きする
ASP.NETは要求されたリソースにアクセスする権限がありません。リソースへのアクセス権をASP.NET要求IDに付与することを検討してください。 ASP.NETには、アプリケーションが偽装されていない場合に使用される基本プロセスID(通常、IIS 5では{MACHINE} \ ASPNET、IIS 6ではネットワークサービス)があります。アプリケーションがviaを偽装している場合、IDは匿名ユーザー(通常はIUSR_MACHINENAME)または認証された要求ユーザーになります。ファイルへのASP.NETアクセスを許可するには、エクスプローラでファイルを右クリックし、[プロパティ]を選択して[セキュリティ]タブを選択します。適切なユーザーまたはグループを追加するには、[追加]をクリックします。 ASP.NETアカウントを強調表示し、必要なアクセスのチェックボックスをオンにします。以下
は私のコード
private void btnExportToExcel_Click(object sender, System.EventArgs e)
{
Microsoft.Office.Interop.Excel.ApplicationClass appExcel = new Microsoft.Office.Interop.Excel.ApplicationClass();
DataSet dsResult = new DataSet();
object missingValue = System.Reflection.Missing.Value;
decimal wkOpenBal = 0.00m;
decimal wkAddition = 0.00m;
decimal wkDisposal = 0.00m;
string rptDt = "";
decimal os_p = 0.00M;
decimal os_s = 0.00M;
decimal closs_16_25 = 0.00M;
decimal closs_26 = 0.00M;
decimal os_clr_p = 0.00M;
decimal os_whs_p = 0.00M;
decimal os_clr_s = 0.00M;
decimal os_whs_s = 0.00M;
decimal mark_to_mkt = 0.00M;
decimal mark_to_mkt_error = 0.00M;
if(txtWeeklyFile.Value != "")
{
//DATABASE CALL
objBursaSubmission = (IBursaSubmission) ObjectFactory.Instance.GetObject(ObjectIdentifier.BursaSubmissionManager);
dsResult = objBursaSubmission.GetReportData(txtRptdt.Text);
try
{
if(dsResult != null && dsResult.Tables[0].Rows.Count > 0)
{
if(System.IO.File.Exists(txtWeeklyFile.Value.ToString()))
{
wkOpenBal = Convert.ToDecimal(dsResult.Tables[0].Rows[0]["WK_OPENBAL"]);
wkAddition = Convert.ToDecimal(dsResult.Tables[0].Rows[0]["WK_ADDITION"]);
wkDisposal = Convert.ToDecimal(dsResult.Tables[0].Rows[0]["WK_DISPOSAL"]);
rptDt = dsResult.Tables[0].Rows[0]["LOGICAL_DT"].ToString();
os_p = Convert.ToDecimal(dsResult.Tables[0].Rows[0]["OS_P"]);
os_s = Convert.ToDecimal(dsResult.Tables[0].Rows[0]["OS_S"]);
closs_16_25 = Convert.ToDecimal(dsResult.Tables[0].Rows[0]["CLOSS_16_25"]);
closs_26 = Convert.ToDecimal(dsResult.Tables[0].Rows[0]["CLOSS_26"]);
os_clr_p = Convert.ToDecimal(dsResult.Tables[0].Rows[0]["OS_CLR_P"]);
os_whs_p = Convert.ToDecimal(dsResult.Tables[0].Rows[0]["OS_WHS_P"]);
os_clr_s = Convert.ToDecimal(dsResult.Tables[0].Rows[0]["OS_CLR_S"]);
os_whs_s = Convert.ToDecimal(dsResult.Tables[0].Rows[0]["OS_WHS_S"]);
mark_to_mkt = Convert.ToDecimal(dsResult.Tables[0].Rows[0]["MARK_TO_MKT"]);
mark_to_mkt_error = Convert.ToDecimal(dsResult.Tables[0].Rows[0]["mark_to_mkt_error"]);
decimal clr_total_p = os_clr_p + os_whs_p;
decimal clr_total_s = os_clr_s + os_whs_s;
Microsoft.Office.Interop.Excel.Workbook wBook = appExcel.Workbooks.Open(txtWeeklyFile.Value.ToString(),Type.Missing,Type.Missing,Type.Missing,
Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,
Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing);
//SHEET MARKET POSITION SHEET 1
Worksheet sheetMarktetPosition1 = (Worksheet)wBook.Sheets[1];
Range mPositionRange = sheetMarktetPosition1.UsedRange;
((Microsoft.Office.Interop.Excel.Range)mPositionRange.Cells[6,7]).Value2 = rptDt.ToString();
((Microsoft.Office.Interop.Excel.Range)mPositionRange.Cells[14,3]).Value2 = os_p.ToString();
((Microsoft.Office.Interop.Excel.Range)mPositionRange.Cells[14,7]).Value2 = mark_to_mkt.ToString();
((Microsoft.Office.Interop.Excel.Range)mPositionRange.Cells[16,3]).Value2 = os_s.ToString();
((Microsoft.Office.Interop.Excel.Range)mPositionRange.Cells[15,5]).Value2 = "";
((Microsoft.Office.Interop.Excel.Range)mPositionRange.Cells[40,3]).Value2 = clr_total_p.ToString();
((Microsoft.Office.Interop.Excel.Range)mPositionRange.Cells[41,3]).Value2 = clr_total_s.ToString();
}
http://support.microsoft.com/kb/257757マイクロソフトでは現在、無人で非対話型のクライアントアプリケーションまたはコンポーネント(ASP、ASP.NETなど)からMicrosoft Officeアプリケーションの自動化を推奨していません。 、DCOM、およびNTサービス)、Officeがこの環境で実行されると、不安定な動作やデッドロックが発生する可能性があるためです。 –