0

VisualStudioから実行するとうまく動作するWebアプリケーションを開発しました。

アプリケーションのテーマは、Excelファイルのコンテンツを取得して表示することです。

アプリケーションには、Excelファイルを取得するためのファイルアップロードコントロールがありました。

VSから実行するとチャームのように機能し、目的の結果を確認できましたが、IISを参照するとエラーが発生します。

コードはFramework4.0で開発されています

Excelファイルがアップロードされておらず、ファイルの読み取り中にエラーが発生したというエラーがスローされます。

これが私のコードです..

IISを参照したときに何が問題になっているのかを検出できますか?

 DataSet dsRates = new Schemas.Rates();
        DataTable dtExcel = new DataTable();
        dtDBTable = dsRates.Tables[0];
        DataTable dtColumnNameNotFound = new DataTable();

        FileStream stream;
        string changed = string.Empty;
        string FilePath = string.Empty;

        try
        {
            if (ValidateUserInputs())
            {
                DataSet dsExcel = new DataSet();
                OleDbConnection con = new OleDbConnection();
                try
                {
                    if (fupExtract.HasFile == true)
                    {
                        FilePath = Server.MapPath("~/Temp/" + fupExtract.PostedFile.FileName);

                        fupExtract.SaveAs(FilePath);


                    }
                    else
                    {
                        fupExtract = ((FileUpload)Session["FileUploadCtrl"]);
                        FilePath = Server.MapPath("~/Temp/" + fupExtract.PostedFile.FileName);
                        fupExtract.SaveAs(FilePath);

                    }


                    //Read the Excel Data in to Datatable
                    string _ConnectionString = string.Empty;
                    string _Extension = Path.GetExtension(FilePath);
                    if (_Extension.Equals(".xls", StringComparison.CurrentCultureIgnoreCase))
                    {
                        _ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + FilePath + ";Extended Properties=" + (char)34 + "Excel 8.0;HDR=NO;IMEX=1;" + (char)34;

                    }
                    //Use ACE OleDb     
                    else if (_Extension.Equals(".xlsx", StringComparison.CurrentCultureIgnoreCase))
                    {

                        _ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + FilePath + ";Extended Properties=" + (char)34 + "Excel 8.0;HDR=NO;IMEX=1;" + (char)34;


                    }
                    else
                    {
                        lblMessage.Text = fupExtract.FileName + "is not a supported format, only '.xls|.xlsx' files are supported";

                        return;
                    }
                    int i = 0;

                    con = new OleDbConnection(_ConnectionString);
                    con.ResetState();
                    con.Open();

                    DataTable dt = con.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
                    foreach (DataRow Sheet in dt.Rows)
                    {
                        OleDbDataAdapter daExcel = new OleDbDataAdapter("SELECT * FROM [" + Sheet["TABLE_NAME"].ToString().Trim() + "]", con);

                        DataTable dtData = new DataTable();
                        daExcel.Fill(dtData);
                        var filteredRows = dtData.Rows.Cast<DataRow>().Where(row => row.ItemArray.Any(field => !(field is System.DBNull)));
                        if (filteredRows.Count() > 0)
                        {
                            dsExcel.Tables.Add(dtData);
                        }
                        i++;
                    }
                    con.Close();
                }
                catch (Exception ex)
                {
                    lblMessage.Text = "Error occured while reading the file";

                    con.Close();
                }
        finally
                {
                    if (File.Exists(FilePath))
                    {
                        File.Delete(FilePath);
                    }


                }

助けてください

ありがとう、

4

2 に答える 2

0

Touは、Excelドキュメントを読むためにInteropを使用できます

        object misValue = System.Reflection.Missing.Value;
        var xlApp = new Excel.ApplicationClass();
        var xlWorkBook = xlApp.Workbooks.Open("yourFile.xls", 0, true, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0);
        var xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);

        Console.Write(xlWorkSheet.get_Range("A1","A1").Value2.ToString());

        xlWorkBook.Close(true, misValue, misValue);
        xlApp.Quit();

        releaseObject(xlWorkSheet);
        releaseObject(xlWorkBook);
        releaseObject(xlApp);
于 2012-09-04T07:38:28.810 に答える
0

私の質問に対する答えがあります。

Office64ビットとMicrosoft.ACE.OLEDB.12.0をインストールしていないということです。私が使用しているのは32ビットです。

于 2012-09-05T05:54:22.800 に答える