72

我正在尝试将一些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();
4

11 回答 11

93

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

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

之后,创建一个通用的 .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或旧版本,但包含的过程相同。

在此处输入图像描述

于 2009-01-21T15:07:07.307 回答
55
FileInfo fi = new FileInfo("C:\\test\\report.xlsx");
if(fi.Exists)
{
    System.Diagnostics.Process.Start(@"C:\test\report.xlsx");
}
else
{
    //file doesn't exist
}
于 2011-10-18T21:49:31.110 回答
9
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);
  }
}
于 2014-01-28T17:45:04.663 回答
3

你应该这样打开

        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

鲁登

于 2013-04-17T06:23:41.163 回答
3

进口

 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# 打开 excel 工作表的视频伙伴https://www.youtube.com/watch?v=O5Dnv0tfGv4

于 2016-08-20T00:39:50.433 回答
2

要打开文件,请尝试以下操作:

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

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

于 2009-01-21T11:39:27.973 回答
2

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

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

由于几个问题,以下内容不起作用。

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 库的文档。

于 2009-01-21T14:57:21.240 回答
2
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);
于 2011-07-15T10:50:35.600 回答
1

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

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

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

于 2009-01-21T15:29:42.987 回答
1

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

于 2012-04-04T15:06:57.567 回答
1

代码 :

 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());
                        }
                    }
                }
            }
于 2015-01-12T06:54:06.490 回答