Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 工作表.save(),它将保持锁定状态_C#_Excel_Memory_Openxml_Filelock - Fatal编程技术网

C# 工作表.save(),它将保持锁定状态

C# 工作表.save(),它将保持锁定状态,c#,excel,memory,openxml,filelock,C#,Excel,Memory,Openxml,Filelock,我已经开发了一个windows窗体项目,可以在excel中导出大型数据。有时,sheet.save()方法需要1小时或更长的时间。我想它一直锁着,但我不知道为什么。有人有办法解决这个问题吗 ... FileInfo temp_excel_file = new FileInfo(Path.Combine(ConfigFile.ConfigsPaths["ExcelRaporFolder"], "temp", "Rakip.xlsm")); rapor_file = new

我已经开发了一个windows窗体项目,可以在excel中导出大型数据。有时,sheet.save()方法需要1小时或更长的时间。我想它一直锁着,但我不知道为什么。有人有办法解决这个问题吗

    ...
    FileInfo temp_excel_file = new FileInfo(Path.Combine(ConfigFile.ConfigsPaths["ExcelRaporFolder"], "temp", "Rakip.xlsm"));
    rapor_file = new FileInfo(Path.Combine(ConfigFile.ConfigsPaths["ExcelRaporFolder"], "excel", FileName + ".xlsm"));
    File.Copy(temp_excel_file.FullName, rapor_file.FullName);
    Log.LogYaz(rapor_file.Name + "-Excell Açılıyor..");
    SpreadsheetDocument myDoc = SpreadsheetDocument.Open(rapor_file.FullName, true);
    IEnumerable<Sheet> sheets = myDoc.WorkbookPart.Workbook.Descendants<Sheet>();
    WorksheetPart worksheetPart = (WorksheetPart)myDoc.WorkbookPart.GetPartById(sheets.Skip(1).First().Id);
    SheetData sheetData = worksheetPart.Worksheet.Elements<SheetData>().First();
    Log.LogYaz(rapor_file.Name + "-Rowlar Yaziliyor..");
    uint row = 2;
    Stopwatch swLoadTime = new Stopwatch();
    swLoadTime.Start();
    foreach (var row_index in filtered_data)
    {
    ....
       sheetData.AppendChild(Utils.CreateRow(row, 0, cell_data));
       row++;
    }
    swLoadTime.Stop();
    string loadRowTime = swLoadTime.Elapsed.ToString();
    Log.LogYaz("RowsWasLoaded -" + FileName.ToString() + Environment.NewLine + "  Load Row Time:" + loadRowTime);
    swLoadTime.Reset();
    swLoadTime.Start();
    worksheetPart.Worksheet.Save();
    myDoc.Close();
    myDoc = null;
    swLoadTime.Stop();
    Log.LogYaz("RaporYazildi -" + FileName.ToString() + Environment.NewLine + "  Load Row Time:" + loadRowTime + Environment.NewLine + "  Save File Time:" + swLoadTime.Elapsed);
。。。
FileInfo temp\u excel\u file=新文件信息(Path.Combine(ConfigFile.ConfigsPaths[“ExcelRaporFolder”]、“temp”、“Rakip.xlsm”);
rapor_file=新文件信息(Path.Combine(ConfigFile.ConfigsPaths[“ExcelRaporFolder”],“excel”,FileName+“.xlsm”);
文件.Copy(temp\u excel\u File.FullName、rapor\u File.FullName);
Log.LogYaz(rapor_file.Name+“-Excell Aılıyor.”;
SpreadsheetDocument myDoc=SpreadsheetDocument.Open(rapor_file.FullName,true);
IEnumerable sheets=myDoc.WorkbookPart.Workbook.subjections();
工作表部件工作表部件=(工作表部件)myDoc.WorkbookPart.GetPartById(sheets.Skip(1.First().Id);
SheetData SheetData=worksheetPart.Worksheet.Elements().First();
Log.LogYaz(rapor_file.Name+“-Rowlar Yaziliyor..”;
uint行=2;
秒表swLoadTime=新秒表();
swLoadTime.Start();
foreach(过滤数据中的var行索引)
{
....
AppendChild(Utils.CreateRow(行,0,单元格_数据));
行++;
}
swLoadTime.Stop();
字符串loadRowTime=swLoadTime.Appeased.ToString();
Log.LogYaz(“RowsWasLoaded-”+FileName.ToString()+Environment.NewLine+“加载行时间:”+loadRowTime);
swLoadTime.Reset();
swLoadTime.Start();
worksheetPart.Worksheet.Save();
myDoc.Close();
myDoc=null;
swLoadTime.Stop();
Log.LogYaz(“rapolyazildi-”+FileName.ToString()+Environment.NewLine+“加载行时间:”+loadRowTime+Environment.NewLine+“保存文件时间:”+swLoadTime.appeased);

您是否能够复制它?你知道它发生在哪一行吗?您是否调查了
foreach
循环以查看它正在旋转的数据量?大多数情况下,这是因为excel引发了阻塞消息框,并且由于您没有打开excel窗口,因此无法看到它。请尝试在打开空白excel窗口的情况下进行调试,因为excel与您可以从中受益的所有文档共享其主窗口。旁注:也许你可以尝试在excel处于“锁定”状态时打开文档,因为它会给你一个消息框。@JeffBridgman“worksheetPart.Worksheet.Save();“这里不会发生,这里不会发生。每个循环都没有问题。有些是20k,有些是100k,但有些不是150k。嗨,您是否解决过此问题?因为我也有同样的问题,但只有一些文件。