Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在C#中打开Excel文件?_C#_.net_Excel_Vsto - Fatal编程技术网

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

如何在C#中打开Excel文件?,c#,.net,excel,vsto,C#,.net,Excel,Vsto,我正在尝试将一些代码转换为C#。我是C#的新手。目前,我正在尝试从文件夹中打开Excel文件,如果它不存在,则创建它。我正在尝试下面的方法。我怎样才能让它工作 Excel.Application objexcel; Excel.Workbook wbexcel; bool wbexists; Excel.Worksheet objsht; Excel.Range objrange; objexcel = new Excel.Application(); if (Directory("C:\\c

我正在尝试将一些代码转换为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();

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

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

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

如果您同时说出错误所在,或者运行时失败的地方,那么可以更容易地帮助您

但是从快速的一瞥中,你已经混淆了一些事情

由于几个问题,下面的方法不起作用

if (Directory("C:\\csharp\\error report1.xls") = "")
您试图做的是创建一个新的目录对象,该对象应该指向一个文件,然后检查是否有任何错误

实际上,您正在尝试调用名为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库的文档。

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

可以在Visual Studio安装程序中的“工作负载>Web和云>Office/SharePoint开发”下选择VSTO

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

Application excel = new Application();
Workbook wb = excel.Workbooks.Open(path);
缺少。Value
是一个特殊的反射结构,用于不必要的参数替换


在较新版本中,所需的程序集引用称为
Microsoft Excel 16.0对象库
。如果未安装最新版本,则可能安装了
Microsoft Excel 15.0对象库
,或旧版本,但包含的过程相同


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

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


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

对于从C应用程序中编辑Excel文件,我最近开始使用。
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);

我很满意。

你应该这样打开

        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);
资料来源:


鲁登代码:

 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());
                        }
                    }
                }
            }
进口

 using Excel= Microsoft.Office.Interop.Excel;
 using Microsoft.VisualStudio.Tools.Applications.Runtime;
下面是使用C#打开excel工作表的代码

下面是一段视频,介绍如何使用C#

打开excel文件打开excel工作表

System.Diagnostics.Process.Start(@"c:\document.xls");

那有什么问题?请描述它,因为直接查看比自己创建一个空白项目然后复制并粘贴代码更容易。对于开始,目录部分抛出错误'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”))除非您使用的是VS2010:)哦,而且您希望缺少。Value
private object\u Value=Missing.Value;
将缺少的替换为_Value。这对我很有用。@Saravanan:请看:
object ReadOnly
。我想您需要传递
true
:请看我的问题……当我添加时,我得到错误,因为
CS0104:“DataTable”是一个am“System.Data.DataTable”和“Microsoft.Office.Interop.Excel.DataTable”之间的模糊引用
@coder:使用System.Data删除
或使用“
使用DataTable=Microsoft.Office.Interop.Excel.DataTable
@abatishchev:当我使用System.Data删除
我为另一组代码使用的
数据集
获取命名空间错误。如果没有excelApp,excel将无法显示。Visible=true。谢谢2011年答案的复制如果有密码,如何启动Excel文件?对我来说很有用。当然比2009年的答案更简单,因为不需要额外的工具,而且一行程序是必不可少的。太好了,正是我想要的,谢谢!我简化了它,只将fi作为
System.Diagnostics.Process.start(fi.ToString())传递到start中
 using Excel= Microsoft.Office.Interop.Excel;
 using Microsoft.VisualStudio.Tools.Applications.Runtime;
    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();
System.Diagnostics.Process.Start(@"c:\document.xls");