使用Interop.Excel,Workbooks.open()返回null

时间:2018-02-15 02:50:36

标签: .net excel office-interop

我遇到了一个奇怪的问题。在我的控制台应用程序中,只有一个文件Workbooks.Open()打开以在我的测试应用程序中返回null或Comb_Object.And,它可以正确返回。 当我将文件名从'人员信息模板.xlsx'更改为任何其他类似'aaa.xlsx'时,它可以正确打开此文件。 我在Google搜索。有人说这可能是一个权限问题,我设置Everyone完全控制到这个文件。它不起作用。

Interop.Excel版本:14,0,4756,1000

Excel文件由Excel 2016创建

以下是我的代码

Application app = null;
Workbook curWB = null;
Worksheet curSheet = null;
app = new Application();
app.Visible = false;
app.UserControl = true;
app.DisplayAlerts = false;
//filename is C:\Users\29561\Desktop\AccmulateInfoTool\AccmulateInfoTool\bin\Debug\2018春季信息\原始邮件下载\人员信息模板.xlsx
curWB = app.Application.Workbooks.Open(filename);
//curWB is null now
curSheet = curWB.Worksheets[1];

1 个答案:

答案 0 :(得分:0)

以下适用于我,仅使用文件名进行测试,而不是使用中文(?)进行文件夹名称测试。请注意,我设置了CultureInfo,这通常是Excel必需的。我不知道这与它有什么关系......

    private void button1_Click(object sender, EventArgs e)
    {
        System.Globalization.CultureInfo ci = System.Threading.Thread.CurrentThread.CurrentCulture;
        Excel.Workbook wb = null;
        Excel.Worksheet ws = null;
        try
        {
            System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US");
            Excel.Application xlApp = new Excel.Application();
            xlApp.Visible = true;
            xlApp.UserControl = true;
            wb = xlApp.Workbooks.Open("C:\\Test\\人员信息模板.xlsx");

        }
        catch (Exception ex)
        { MessageBox.Show(ex.Message); }
        finally
        {
            System.Threading.Thread.CurrentThread.CurrentCulture = ci;
            ws = null;
            wb = null;
            xlApp = null;
        }
    }