如何在 C# 中打开 Excel 文件?

Posted

技术标签:

【中文标题】如何在 C# 中打开 Excel 文件?【英文标题】:How to open an Excel file in C#? 【发布时间】:2009-01-21 11:25:48 【问题描述】:

我正在尝试将一些 VBA 代码转换为 C#。我是 C# 新手。目前我正在尝试从文件夹中打开一个 Excel 文件,如果它不存在,则创建它。我正在尝试类似以下的事情。我怎样才能让它发挥作用?

Excel.Application objexcel;
Excel.Workbook wbexcel;
bool wbexists;
Excel.Worksheet objsht;
Excel.Range objrange;

objexcel = new Excel.Application();
if (Directory("C:\\csharp\\error report1.xls") = "")

    wbexcel.NewSheet();


else

    wbexcel.Open("C:\\csharp\\error report1.xls");
    objsht = ("sheet1");

objsht.Activate();

【问题讨论】:

那么问题出在哪里?请描述一下,因为它比自己开始创建空白项目然后复制粘贴代码更容易直接看到。 for 启动目录部分抛出错误'system.io.directory 是一种类型,但用作变量" 这将阻止该错误:if(!Directory.Exists(@"C:\csharp\error report.xls")) if (Directory("C:\\csharp\\error report1.xls") = "") 应该是 if (!File.Exists("C:\\csharp\\error report1. xls")) 【参考方案1】:

您需要安装 Microsoft Visual Studio Tools for Office (VSTO)。

可以在 Visual Studio 安装程序中的 Workloads > Web & Cloud > Office/SharePoint Development 下选择 VSTO。

之后,创建一个通用 .NET 项目并通过“添加引用...> 程序集”对话框添加对 Microsoft.Office.Interop.Excel 的引用。

Application excel = new Application();
Workbook wb = excel.Workbooks.Open(path);

Missing.Value 是一种特殊的反射结构,用于不必要的参数替换


在较新的版本中,所需的程序集引用称为Microsoft Excel 16.0 Object Library。如果您没有安装最新版本,您可能安装了 Microsoft Excel 15.0 Object Library 或旧版本,但包含的过程相同。

【讨论】:

@Saravanan:见MSDN:Object ReadOnly。我猜你需要通过true :请看我的问题...***.com/questions/8906670/… 当我补充说我得到错误CS0104: 'DataTable' is an ambiguous reference between 'System.Data.DataTable' and 'Microsoft.Office.Interop.Excel.DataTable' @coder:删除using System.Data;或使用“using DataTable = Microsoft.Office.Interop.Excel.DataTable; @abatishchev:当我删除 using System.Data; 时,我得到 dataset 的命名空间错误,我正在将其用于另一组代码..【参考方案2】:
FileInfo fi = new FileInfo("C:\\test\\report.xlsx");
if(fi.Exists)

    System.Diagnostics.Process.Start(@"C:\test\report.xlsx");

else

    //file doesn't exist

【讨论】:

为我工作。当然比接受的 2009 年答案更简单,因为不需要额外的工具,而且它是必不可少的。 太好了,正是我想要的,谢谢!我通过将开头的 fi 传递为 System.Diagnostics.Process.Start(fi.ToString()); 来简化它 这是迄今为止最简单的方法。谢谢【参考方案3】:
private void btnChoose2_Click(object sender, EventArgs e)

  OpenFileDialog openfileDialog1 = new OpenFileDialog();
  if (openfileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
  
    this.btnChoose2.Text = openfileDialog1.FileName;
    String filename = DialogResult.ToString();

    var excelApp = new Excel.Application();
    excelApp.Visible = true;
    excelApp.Workbooks.Open(btnChoose2.Text);
  

【讨论】:

如果没有 excelApp.Visible = true,则不会显示 excel。谢谢!【参考方案4】:

你应该这样打开

        Excel.Application xlApp ;
        Excel.Workbook xlWorkBook ;
        Excel.Worksheet xlWorkSheet ;
        object misValue = System.Reflection.Missing.Value;

        xlApp = new Excel.ApplicationClass();
        xlWorkBook = xlApp.Workbooks.Open("csharp.net-informations.xls", 0, true, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0);
        xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);

来源:http://csharp.net-informations.com/excel/csharp-open-excel.htm

鲁登

【讨论】:

【参考方案5】:

进口

 using Excel= Microsoft.Office.Interop.Excel;
 using Microsoft.VisualStudio.Tools.Applications.Runtime;

这是使用 C# 打开 Excel 工作表的代码。

    Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application();
    Microsoft.Office.Interop.Excel.Workbook wbv = excel.Workbooks.Open("C:\\YourExcelSheet.xlsx");
    Microsoft.Office.Interop.Excel.Worksheet wx = excel.ActiveSheet as Microsoft.Office.Interop.Excel.Worksheet;

    wbv.Close(true, Type.Missing, Type.Missing);
    excel.Quit();

这是一个关于如何使用 C# https://www.youtube.com/watch?v=O5Dnv0tfGv4 打开 Excel 工作表的视频伙伴

【讨论】:

【参考方案6】:

要打开文件,试试这个:

objexcel.Workbooks.Open(@"C:\YourPath\YourExcelFile.xls",
    missing, missing, missing, missing, missing, missing, missing,
    missing, missing, missing, missing, missing,missing, missing);

您必须提供那些看起来很愚蠢的“缺失”论点。如果您在 VB.Net 中编写相同的代码,则不需要它们,但在 C# 中无法避免它们。

【讨论】:

除非你使用 VS2010 :) 哦,你想要 Missing.Value private object _value = Missing.Value; 将缺失的部分替换为 _value。它对我有用。【参考方案7】:

如果您也说出问题所在,或者在运行时失败,则更容易为您提供帮助。

但是快速浏览一下,您已经混淆了一些事情。

由于几个问题,以下方法不起作用。

if (Directory("C:\\csharp\\error report1.xls") = "")

您要做的是创建一个新的 Directory 对象,该对象应该指向一个文件,然后检查是否有任何错误。

您实际上是在尝试调用一个名为 Directory() 的函数,然后为结果分配一个字符串。这将不起作用,因为 1/ 您没有名为 Directory(string str) 的函数,并且您无法从函数分配结果(您只能为变量分配值)。

你应该做的(至少对于这一行)如下

FileInfo fi = new FileInfo("C:\\csharp\\error report1.xls");
if(!fi.Exists)

    // Create the xl file here

else

    // Open file here

至于为什么Excel代码不起作用,您必须检查Google应该能够为您提供的Excel库的文档。

【讨论】:

【参考方案8】:
Microsoft.Office.Interop.Excel.Application excapp;

excapp = new Microsoft.Office.Interop.Excel.Application();

object misval=System.Reflection.Missing.Value;

Workbook wrkbuk = new Workbook();

Worksheet wrksht = new Worksheet();

wrkbuk = excapp.Workbooks._Open(@"C:\Users\...\..._template_v1.0.xlsx", misval, misval, 
misval, misval, misval, misval, misval, misval, misval, misval, misval, misval);

wrksht = (Microsoft.Office.Interop.Excel.Worksheet)wrkbuk.Worksheets.get_Item(2);

【讨论】:

【参考方案9】:

这是一个商业应用程序还是一些业余爱好者/开源软件?

我问这个是因为根据我的经验,所有免费的 .NET Excel 处理替代方案都存在严重问题,原因各不相同。对于业余爱好者,我通常最终将 jExcelApi 从 Java 移植到 C# 并使用它。

但如果这是一个商业应用程序,您最好购买第三方库,例如Aspose.Cells。相信我,这完全值得,因为它节省了大量时间,而且时间不是免费的。

【讨论】:

【参考方案10】:

代码:

 private void button1_Click(object sender, EventArgs e)
     

        textBox1.Enabled=false;

            OpenFileDialog ofd = new OpenFileDialog();
            ofd.Filter = "Excell File |*.xlsx;*,xlsx";
            if (ofd.ShowDialog() == DialogResult.OK)
            
                string extn = Path.GetExtension(ofd.FileName);
                if (extn.Equals(".xls") || extn.Equals(".xlsx"))
                
                    filename = ofd.FileName;

                    if (filename != "")
                    
                        try
                        
                            string excelfilename = Path.GetFileName(filename);


                        
                        catch (Exception ew)
                        
                            MessageBox.Show("Errror:" + ew.ToString());
                        
                    
                
            

【讨论】:

【参考方案11】:

为了在 C# 应用程序中编辑 Excel 文件,我最近开始使用 NPOI。 我很满意。

【讨论】:

以上是关于如何在 C# 中打开 Excel 文件?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C# 中读取 excel 文件而不使用 Microsoft.Office.Interop.Excel 库

c#如何在winform中打开一个excel文档呢

如何在 C# 中使用 Microsoft.Office.Interop.Excel.Application 保存打开的文档?

C#如何读取带密码的Excel文件

c# 如何设置excel文件名

C# Winform如何打开指定的文件夹?