【问题标题】:C# error saving Excel fileC# 保存 Excel 文件时出错
【发布时间】:2017-10-06 18:50:03
【问题描述】:

我对 C# 还是很陌生,我正在做很多实验,我试图让我的程序对用户更友好一点,这就是问题所在。 起初,excelfile 的位置在公共静态字符串中,我没有问题。我已将其更改为:

 public string Excellocation()

    {
        string xlLocation;
        if (but_Browse.Text == "Zoek Excel")
        {

            xlLocation = @"E:\Levi\Documents\Verjaardagen.xlsx";
        }
        else //Only if I get into this part of my code I get the error
        {
            xlLocation = but_Browse.Text;
        }
        return xlLocation;
    }

我使用的按钮可以让用户给我一个 excel 文件的位置:

private void but_Browse_Click(object sender, EventArgs e)
    {

        var FD = new System.Windows.Forms.OpenFileDialog();
        if (FD.ShowDialog() == System.Windows.Forms.DialogResult.OK)
        {
            string fileToOpen = FD.FileName;

            System.IO.FileInfo File = new System.IO.FileInfo(FD.FileName);

            //OR

            System.IO.StreamReader reader = new System.IO.StreamReader(fileToOpen);
            //etc
            but_Browse.Text = fileToOpen;
            this.but_Browse.AutoSize = true;
            But_Import.Visible = true;
        }

    }

读取 Excel 文件没有问题,我的程序找到并处理它,当且仅当用户使用“浏览按钮”更改位置时,我从 Windows 收到一条消息,表明已经有一个 excel 文件该名称,如果我想替换它,如果我点击该消息,我的代码会在尝试保存 excel 文件的行上给出错误

            xlWorkbook.Save();
            xlWorkbook.Close(true);
            xlApp.Quit();
            System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp);

xlWorkbook.Save() 给了我这个错误:

发生 System.Runtime.InteropServices.COMException
HResult=0x800A03EC Message=Verjaardagen.xlsx 无法保存, 因为它是只读的。

我不知道为什么我在使用我的按钮给我相同的位置时却得到一个错误,而我却得到一个错误的默认位置。

有谁知道我做错了什么?

提前致谢

【问题讨论】:

  • 如果您将代码修改为:xlLocation = but_Browse.Text; MessageBox.Show(xlLocation); 这会给您任何线索吗?
  • 消息框给了我这个:E:\Levi\Documents\Verjaardagen.xlsx 这应该是正确的?
  • 是不是和你的StreamReader有关,你保存的时候文件是不是已经打开了?
  • 即您在尝试保存文件之前是否致电reader.Close()
  • 单击按钮后,它会打开 Excel,执行一些操作,然后尝试保存并关闭它。在我单击该按钮之前,Excel 已关闭(在任务管理器中看不到 excel,我尝试重新启动我的电脑以确保 excel 没有在任何地方打开)

标签: c# excel


【解决方案1】:

所以问题是当您在通过but_Browse_Click之后尝试写入文件时,该文件是只读的?你要关闭 StreamReader 吗?尝试使用

reader.close();

在 but_Browse_Click 中。

也许更好的方法是:

using (StreamReader reader = new StreamReader(fileToOpen)) { //all code involving the reader in here }

这会在完成时自动关闭。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-13
    • 1970-01-01
    • 2015-10-04
    • 1970-01-01
    • 2022-07-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多