ranio Ответов: 1

Как устранить исключение из исключения проблемы дискового пространства при записи в файл excel на языке C#?


Я получаю приведенное ниже исключение при записи в файл excel на языке c# при развертывании на сервере.Локально никакой проблемы как таковой нет.

Исключение:

Microsoft Excel не может открыть или сохранить больше документов, потому что не хватает доступной памяти или дискового пространства.

Чтобы освободить больше памяти, закройте книги или программы, которые вам больше не нужны.

• Чтобы освободить место на диске, удалите ненужные файлы с сохраняемого диска.

Что я уже пробовал:

Основной код выглядит следующим образом:
_Application xlApp = new Microsoft.Office.Interop.Excel.Application();
object misValue = System.Reflection.Missing.Value;
_Workbook xlWorkBook = null;
_Worksheet xlWorkSheet = null;
string strFileName = string.Empty;
try
{

    string ExcelTemplateFullPath = string.Empty;
    string ExcelExtension = string.Empty;
    string DestinationFullPathExcel = string.Empty;

    if (File.Exists(templatePath + "CustomerTemplate" + ".xls"))
    {
        Logger.Log("Started generating .xls File ", LogFilename.ServiceLog, 3, MethodInfo.GetCurrentMethod().Name);
        ExcelExtension = ".xls";
        ExcelTemplateFullPath = templatePath + "CustomerTemplate" + ExcelExtension;
        strFileName = filename + ExcelExtension;
        DestinationFullPathExcel = DestinationPDFPath + strFileName;

    }
    else if (File.Exists(templatePath + "CustomerTemplate" + ".xlsx"))
    {
        Logger.Log("Started generating .xlsx File ", LogFilename.ServiceLog, 3, MethodInfo.GetCurrentMethod().Name);
        ExcelExtension = ".xlsx";
        ExcelTemplateFullPath = templatePath + "CustomerTemplate" + ExcelExtension;
        strFileName = filename + ExcelExtension;
        DestinationFullPathExcel = DestinationPDFPath + strFileName;

    }
    else
    {
        Logger.Log("Template doesn't exists in the Folder: " + templatePath, LogFilename.ServiceLog, 3, MethodInfo.GetCurrentMethod().Name);
        return strFileName;
    }



    xlApp.DisplayAlerts = false;
    //object misValue = System.Reflection.Missing.Value;
    // _Workbook xlWorkBook = xlApp.Workbooks.Add(misValue);
    xlWorkBook = xlApp.Workbooks.Add(misValue);
    Logger.Log("Started excel Template ", LogFilename.ServiceLog, 3, MethodInfo.GetCurrentMethod().Name);
    //xlWorkBook = xlApp.Workbooks.Open(ExcelTemplateFullPath, 0, true, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0);
    try
    {
        xlWorkBook = xlApp.Workbooks.Add(ExcelTemplateFullPath);
    }
    catch(Exception ex)
    {
        Logger.Log("Failed to open ExcelTemplate ", LogFilename.ServiceLog, 3, MethodInfo.GetCurrentMethod().Name);
        Logger.Log(ex, LogFilename.ServiceLog, 1, MethodInfo.GetCurrentMethod().Name, false);

    }
    Logger.Log("Opened  excel Template ", LogFilename.ServiceLog, 3, MethodInfo.GetCurrentMethod().Name);
   // _Worksheet xlWorkSheet = (_Worksheet)xlWorkBook.Worksheets.get_Item(1);
    try
    {
        xlWorkSheet = (_Worksheet)xlWorkBook.Worksheets.get_Item(1);
        for (int i = 0; i < Values.Length; i++)
        {
            string[] val = Values[i].Split(delimiter1);

            for (int j = 0; j < val.Length; j++)
            {
                int k = 0;
                k = i + 1;
                //xlWorkSheet.Cells[k + 1, j + 1] = "'" + val[j];
                xlWorkSheet.Cells[k + 1, j + 1] = val[j];

            }

        }
    }
    catch (Exception ex)
    {
        Logger.Log("Failed to extract ExcelTemplate ", LogFilename.ServiceLog, 3, MethodInfo.GetCurrentMethod().Name);
        Logger.Log(ex, LogFilename.ServiceLog, 1, MethodInfo.GetCurrentMethod().Name, false);
    }
    Logger.Log("Extracted  excel Template ", LogFilename.ServiceLog, 3, MethodInfo.GetCurrentMethod().Name);
    try
    {
        xlWorkBook.SaveAs(DestinationFullPathExcel, XlFileFormat.xlWorkbookNormal, Type.Missing, Type.Missing, false, Type.Missing, XlSaveAsAccessMode.xlShared, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
    }
    catch (Exception ex)
    {
        Logger.Log("Failed to save generated ExcelTemplate ", LogFilename.ServiceLog, 3, MethodInfo.GetCurrentMethod().Name);
        Logger.Log(ex, LogFilename.ServiceLog, 1, MethodInfo.GetCurrentMethod().Name, false);
    }


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

    releaseObject(xlWorkSheet);
    releaseObject(xlWorkBook);
    releaseObject(xlApp);


}

catch (Exception ex)
{
    xlWorkBook.Close(true, misValue, misValue);
    xlApp.Quit();

    releaseObject(xlWorkSheet);
    releaseObject(xlWorkBook);
    releaseObject(xlApp);
    throw (ex);
}
return strFileName;

lw@zi

Это происходит постоянно или периодически? Возможно, вам следует проверить работоспособность сервиса на предмет того, сколько процессов запущено на нем и сколько ресурсов доступно.

1 Ответов

Рейтинг:
2

Richard Deeming

Вы отметили этот вопрос как ASP.NET; Office Interop не поддерживается в ASP.NET, или любой другой неинтерактивный процесс:

В настоящее время корпорация Майкрософт не рекомендует и не поддерживает автоматизацию приложений Microsoft Office из любого автоматического, неинтерактивного клиентского приложения или компонента (включая ASP, ASP.NET, DCOM и NT Services), поскольку Office может демонстрировать нестабильное поведение и/или взаимоблокировку при запуске Office в этой среде.


Существуют различные способы создания электронных таблиц Excel на сервере без использования Office interop. Например:


Alek Massey

Согласитесь, приложение Excel-это огромный ресурс.
Используйте openxml SDK. Это работает.