workbook.SaveAs (Filepath) не работает в промежуточной среде - PullRequest
0 голосов
/ 06 июня 2018

Я пытаюсь удалить пустые строки и столбцы из Excel при чтении этого листа Excel.В моей локальной среде работает нормально. В промежуточной среде не работает workbook.SaveAs (). Я разместил некоторые журналы, чтобы прочитать этот журнал для метода следа и ошибки. После строки workbook.SaveAs () следующий журнал не читает.Какое решение для этого. Кодовое изображение

Ошибка при получении: получение фабрики классов COM для компонента с CLSID {00024500-0000-0000-C000-000000000046} не удалось из-за следующегоошибка: 80080005 Ошибка выполнения сервера (исключение из HRESULT: 0x80080005 (CO_E_SERVER_EXEC_FAILURE)).

        [HttpPost]
        public ActionResult ImportPartNumbersFromexcel()
        {
        DataSet ds = new DataSet();
        string UserID = Convert.ToString(Session["userID"]);
        ds = dbOperations.GetPartNumbers(UserID);
        Logger.TestWriteLog("Public", "ImportPartNumbersFromexcel", "GetPartNumbers", null);
        DataTable partnums = ds.Tables[0];
        //  Get all files from Request object  
        HttpFileCollectionBase files = Request.Files;
        HttpPostedFileBase file = null;
        string extension = string.Empty;
        string fname = "";
        string NewPath = string.Empty;
        for (int i = 0; i < files.Count; i++)
        {
        file = files[i];
        // Checking for Internet Explorer  
        if (Request.Browser.Browser.ToUpper() == "IE" || Request.Browser.Browser.ToUpper() == "INTERNETEXPLORER")
        {
        string[] testfiles = file.FileName.Split(new char[] { '\\' });
        fname = testfiles[testfiles.Length - 1];
        }
        else
        {
        fname = file.FileName;
        }
        FileInfo fi = new FileInfo(fname);
        extension = fi.Extension;
        fname = UserID + "_" + fname + "_" + DateTime.Now.ToString("ddMMyyyyhhmmss") + extension;
        // Get the complete folder path and store the file inside it.  
        fname = Path.Combine(Server.MapPath("~/EOrderImports/"), fname);
        file.SaveAs(fname);
        }
        Logger.TestWriteLog("Public", "ImportPartNumbersFromexcel", fname, null);
        string connString = "";

        Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application();
        Microsoft.Office.Interop.Excel.Workbook workbook = excel.Workbooks.Open(fname);
        Microsoft.Office.Interop.Excel.Worksheet worksheet = workbook.Worksheets["Sheet1"];
        Microsoft.Office.Interop.Excel.Range usedRange = worksheet.UsedRange;


        object[,] allValues = (object[,])usedRange.Cells.Value;
        int totalRows = usedRange.Rows.Count;
        if (totalRows == 1)
        {
            return Json("InvalidTemplate", JsonRequestBehavior.AllowGet);
        }

        #region Delete Empty Rows and Cols from Template
        DeleteEmptyRowsCols(worksheet);
        #endregion

        Logger.TestWriteLog("Public", "ImportPartNumbersFromexcel", "DeleteEmptyRowsCols", null);
        string filename = file.FileName;
        FileInfo fii = new FileInfo(filename);
        fname = Path.GetFileNameWithoutExtension(fii.Name);
        Logger.TestWriteLog("Public", "ImportPartNumbersFromexcel", fname, null);
        string fname1 = string.Empty;

        fname = fname + "_Removed" + "_" + DateTime.Now.ToString("ddMMyyyyhhmmss") + extension;

        // Get the complete folder path and store the file inside it.  
        fname = Path.Combine(Server.MapPath("~/EOrderImports/"), fname);

        Logger.TestWriteLog("Public", "ImportPartNumbersFromexcel", fname1, null);
        //workbook.SaveAs(fname1);
        try
        {
         workbook.SaveAs(fname, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange);
        } 
        catch (Exception ex)
        {
        Logger.WriteLog("Public", "ImportPartNumbersFromexcel", ex, null);
        }


        Logger.TestWriteLog("Public", "ImportPartNumbersFromexcel", "SaveAS", null);
        }

1 Ответ

0 голосов
/ 06 июня 2018

Пожалуйста, обратитесь к Извлечение фабрики класса COM для сбоя компонента

Я просто вставил сюда содержимое исправления.

В DCOMCNFG, щелкните правой кнопкой мыши на MyКомпьютер и выберите свойства.

Выберите вкладку COM Securities.

В разделе «Права доступа» нажмите «Изменить параметры по умолчанию», добавьте в него сетевую службу и предоставьте ей разрешение «Разрешить локальный доступ».Сделайте то же самое для \ Users.

В разрешениях на запуск и активацию щелкните «Изменить значения по умолчанию», добавьте к нему сетевую службу и предоставьте ей разрешение «Локальный запуск» и «Локальная активация».Сделайте то же самое для \ Users.

...