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

C# Microsoft.Office.Interop.Excel打开和工作表错误,c#,excel,C#,Excel,我有一个我不明白的问题。 让我先解释一下我的软件是如何工作的 我每分钟开发3个不同的软件循环,其中两个打开同一个excel文件,但不是同时打开,但其中一个有时会崩溃,可能是8小时后,2天后或1小时后。真是一团糟 并且它可以位于xlWorkbook=xlApp.Workbooks.Open(路径)上;或xlWorksheet=xlWorkbook.Sheets{1} 下面是给我一个错误的部分: public Excel.Application xlApp = new Excel.Appli

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

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

并且它可以位于xlWorkbook=xlApp.Workbooks.Open(路径)上;或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;
}
public Excel.Application xlApp=new Excel.Application();
公共Excel工作簿;
公共Excel.\u工作表xl工作表;
公共Excel.Range xlRange;
public void CsvParcoursVisuCrea(字符串流量、双延迟、字符串小时、字符串名称、字符串日期、整数索引)
{
DateTime dateconvert=DateTime.Parse(日期);
字符串路径=域+@“TCD_ParcoursVisu.xlsx”;
如果(!path.IsFileOpen())
{
如果(索引==0)
xlWorkbook=xlApp.Workbooks.Open(路径);
如果(xl工作簿==null)
{
如果(索引==0)
LogWriteToFile(“工作簿错误,无法打开”,“警报:工作簿错误”);
}
其他的
{
如果(索引==0)
LogWriteToFile(“TCD_ParcoursVisu.xlsx现在已打开”,“过程:创建TCD parcours”);
xlWorksheet=xlWorkbook.Sheets[1];
xlRange=xlWorksheet.UsedRange;
int rowCount=xlRange.Rows.Count;
int colCount=xlRange.Columns.Count;
如果(rowCount得到它,

我所能做的就是处理文件当前被锁定的异常,经过一些研究后,似乎Interop有时会锁定,这就是我的软件崩溃的原因。

下面是给我一个错误的部分,错误说明了什么?尝试以只读模式打开工作簿:
xlApp.Workbooks.open(“文件路径”,只读:true)
但是我编辑工作簿,为什么要以只读方式打开它?错误是说COM错误之类的,你能说得更具体一点吗?我们没有义务猜测……如果可以的话,我会这样做。我会在出现错误时进行编辑。同时,我想说,打开工作簿时有一些过于复杂的逻辑。我想,你应该st需要检查工作簿是否打开。那么
index
扮演什么角色?
    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;
    }