Microsoft.Office.Interop.Excel打开和工作表错误

时间:2018-08-28 08:37:14

标签: c# excel

我有一个不明白的问题。 首先让我解释一下我的软件如何工作。

我每分钟开发3个不同的软件循环,其中两个正在打开相同的excel文件,但不是同时打开,但是其中一个有时会崩溃,可能是8小时之后,2天之后或之后1小时。真是一团糟。

它可以位于 xlWorkbook = xlApp.Workbooks.Open(path); xlWorksheet = xlWorkbook.Sheets {1};

这是给我一个错误的部分:

    public Excel.Application xlApp = new Excel.Application();
    public Excel.Workbook xlWorkbook;
    public Excel._Worksheet xlWorksheet;
    public Excel.Range xlRange;

    public void CsvParcoursVisuCrea(string flux, double delay, string hour, string name, string date, int index)
    {
        DateTime dateconvert = DateTime.Parse(date);
        string path = domain + @"TCD_ParcoursVisu.xlsx";
        if (!path.IsFileOpen())
        {
            if (index == 0)
                xlWorkbook = xlApp.Workbooks.Open(path);

            if (xlWorkbook == null)
            {
                if (index == 0)
                    LogWriteToFile("Error in workbook, impossible to open", "ALERT : WorkBook error");
            }
            else
            {
                if (index == 0)
                    LogWriteToFile("TCD_ParcoursVisu.xlsx is now open", "Process : Creation TCD parcours");

                xlWorksheet = xlWorkbook.Sheets[1];
                xlRange = xlWorksheet.UsedRange;

                int rowCount = xlRange.Rows.Count;
                int colCount = xlRange.Columns.Count;

                if (rowCount <= 1)
                {
                    xlWorksheet.Cells[rowCount, 1] = "Flux";
                    xlWorksheet.Cells[rowCount, 2] = "Nom Parcours";
                    xlWorksheet.Cells[rowCount, 3] = "Date";
                    xlWorksheet.Cells[rowCount, 4] = "Heure";
                    xlWorksheet.Cells[rowCount, 5] = "Minute";



                }
                xlWorksheet.Cells[rowCount + 1, 1] = flux;
                xlWorksheet.Cells[rowCount + 1, 2] = name;
                xlWorksheet.Cells[rowCount + 1, 3] = dateconvert;
                xlWorksheet.Cells[rowCount + 1, 4] = hour;
                xlWorksheet.Cells[rowCount + 1, 5] = delay / 60;
            }
        }
        else
        {
            LogWriteToFile("Being used by another process", "Process : Parcours visu crea");
        }
    }

    return false;
}

这是崩溃前我最后一个日志行的屏幕截图

Here's a screenshot of my last log line before crash

我已经在上午10点启动了它。

这是在我的软件崩溃中调用CsvParcoursVisuCrea的方法:

    private void AllCsvCreation()
    {
        SumParcours();
        int[] tabMemorySum = IndexSum();

        for (int i = 0; i < parcObj.Date.Length; i++)
        {
                if (parcObj.Date[i] != null)
                {
                    CsvCreation(parcObj.Date[tabMemoryIndex[i]], parcObj.Hour[tabMemoryIndex[i]], parcObj.Exploitant, parcObj.Name[tabMemoryIndex[i]], tabMemorydelay[tabMemorySum[i] - 1].ToString(), parcObj.Fiability[tabMemoryIndex[i]].ToString(), parcObj.StrnmeDelayXystaXyendScore[tabMemoryIndex[i]], i);
                    CsvParcoursVisuCrea(parcObj.Exploitant, tabMemorydelay[tabMemorySum[i] - 1], parcObj.Hour[tabMemoryIndex[i]], parcObj.Name[tabMemoryIndex[i]], parcObj.Date[tabMemoryIndex[i]], i);
                }
        }

        //Cleanup
        GC.Collect();
        GC.WaitForPendingFinalizers();
        //Close and release
        xlApp.DisplayAlerts = false;
        xlWorkbook.Save();
        xlWorkbook.Close();
        xlApp.DisplayAlerts = true;
    }

CsvCreation和CsvParcoursVisuCrea没有打开相同的Csv,CsvCreation从未崩溃,我用AppendLine()填充了CsvCreation。

希望它很清楚,很长很抱歉。

1 个答案:

答案 0 :(得分:0)

知道了, 我所要做的就是处理文件当前被锁定的异常,经过一些研究,Interop有时会被锁定,这就是为什么我的软件崩溃的原因。