如何在 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.Valueprivate 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# 中使用 Microsoft.Office.Interop.Excel.Application 保存打开的文档?