在以下代码中,我试图检查Excel文件是否已打开, 如果是,那么我想关闭它,当我运行代码时,文件会 没关闭,你能帮忙吗?
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; using System.Runtime.InteropServices; using System.Windows.Forms; using Microsoft.Office.Interop.Excel; using Excel = Microsoft.Office.Interop.Excel; namespace CloseIfFileOpen { class Program { public static void Main() { Excel.Application oApp; Excel.Workbook oBook; oApp = new Excel.Application(); oBook =oApp.Workbooks.Add(@"C:\Users\user\Documents\WEF\Excel\Example.xlsx"); string filePath; filePath = @"C:\Users\user\Documents\WEF\Excel\Example.xlsx"; try { using (File.Open(filePath, FileMode.Open)) { } } catch (IOException e) { var errorCode = Marshal.GetHRForException(e) & ((1 << 16) - 1); //return errorCode == 32 || errorCode == 33; MessageBox.Show("the file is unavailable now"); oBook.Save(); oBook.Close(); oApp.Quit(); } } } }
答案 0 :(得分:1)
我是否正确地假设您要检查该文件是否正被其他进程使用,如果是,请关闭它?因为我认为在Windows中没有办法做到这一点,所以你只能关闭自己对文件的使用。可能有办法通过使用Win32 API强制解锁文件,但没有任何内容构建到C#中。在文件上调用close只会关闭自己对文件的使用,不会影响其他进程。
答案 1 :(得分:0)
我正在使用此方法检查是否可以打开文件,如果是,则执行此操作,否则请执行此操作 将参数路径设置为Excel工作表路径
private Microsoft.Office.Interop.Excel.Application appExcel;
private Workbook newWorkbook = null;
private _Worksheet objsheet = null;
public void excel_init(String path)
{
appExcel = new Microsoft.Office.Interop.Excel.Application();
if (System.IO.File.Exists(path))
{
// then go and load this into excel
newWorkbook = appExcel.Workbooks.Open(path, true, true);
objsheet = (_Worksheet)appExcel.ActiveWorkbook.ActiveSheet;
}
else
{
Console.WriteLine("Unable to open workbook");
System.Runtime.InteropServices.Marshal.ReleaseComObject(appExcel);
appExcel = null;
}
}
答案 2 :(得分:0)
您并不是说您想要对该文件进行独占访问。似乎不太可能,但也许Excel不会锁定文件,以便其他进程可以在读取模式下打开文件。也许你的文件开放行应该是:
using (File.Open(filePath, FileMode.Open, FileAccess.Read, FileShare.None)) { }
答案 3 :(得分:0)
这段代码肯定会帮助您检查文件是否打开 (我检查了excel文件的代码)
private bool check_file_oppen(string check)
{//where string check is the path of required file
try
{
Stream s = File.Open(check, FileMode.Open, FileAccess.Read, FileShare.None);
s.Close();
MessageBox.Show("FILE IS NOT OPEN");
return true;
}
catch (Exception)
{
MessageBox.Show("FILE IS OPEN");
return false;
}
}
现在,&#34;如果这个excel文件已打开,那么如何关闭它?&#34;是我仍在寻找的问题,............
如果你找到答案,请与我分享,...............
感谢。
ARK。
答案 4 :(得分:0)
foreach (var process in Process.GetProcessesByName("EXCEL"))
{
process.Kill();
}
答案 5 :(得分:0)
在Java中,您可以使用这种方法-
//Open the excel file using Desktop.getDesktop()
Desktop.getDesktop().open(new
File("C:\\Users\\AnubhavPatel\\Desktop\\Testing_Code_Macro.xlsm"));
Thread.sleep(5000);
//Save and close it using robot class
robot.keyPress(KeyEvent.VK_CONTROL);
robot.keyPress(KeyEvent.VK_S);
robot.keyRelease(KeyEvent.VK_S);
robot.keyRelease(KeyEvent.VK_CONTROL);
robot.keyPress(KeyEvent.VK_ALT);
robot.keyPress(KeyEvent.VK_F4);
robot.keyRelease(KeyEvent.VK_F4);
robot.keyRelease(KeyEvent.VK_ALT);
Thread.sleep(5000);
//Then write to it using outputStream
FileOutputStream outputStream = new FileOutputStream(
"C://Users//AnubhavPatel//Desktop/Testing_Code_Macro.xlsm");
workbook.write(outputStream);
outputStream.close();