c#用于处理我的excel文档

本文关键字:excel 文档 我的 处理 用于 | 更新日期: 2023-09-27 18:22:42

我正在开发一个硒应用程序。Selenium访问了我的sharepoint网站,并从那里下载了一张excel表。现在,忘掉硒吧。

我想用c#处理打开的excel表。从某种意义上说,我想过滤一个列,并将所有值(过滤后)存储到一个临时变量中?这可能吗?

我怎样才能做到这一点?

任何意见都会很有帮助。

c#用于处理我的excel文档

是的,这是可能的。Office Interop是一个容易找到但很难做到的解决方案:例如,打开excel并强制它执行您的程序。这是可行的,但很难调试,速度很慢。我推荐EPPLUS-这可以很容易地打开和修改xlsx文件,与excle interop相比速度非常快。它是免费的http://epplus.codeplex.com/

使用Office文档的官方方法通常是使用Microsoft自己的Open XML SDK来处理Office XML文件(docx、xlsx等)。您不需要在计算机上安装Excel即可使用SDK。您可以在"使用Open XML和Excel"中找到使用Excel文件的文档和示例

使用Interop是一个可怕的想法,因为你必须为每个文档创建一个新的Excel实例,你必须确保它在完成时关闭。对于服务器应用程序(例如网站)来说,这是一种无法忍受的情况,因为多个线程可能同时尝试使用Excel文件。Excel Interop是一种快速关闭服务器的方法。

已经有了一些如何用C#处理Word/Excel/Powepoint文档的解决方案。实际上,我只是想重复一下他们说的,但我会提供更多的代码。我必须开发一个允许自动化的软件,你需要问自己的第一个问题是,时间限制是什么。这就是我选择的原因,因为它的实现速度相当快。你可以在这里找到一些关于它的信息:

http://msdn.microsoft.com/fr-fr/library/microsoft.office.interop.excel.application%28v=office.11%29.aspx

由于对象的一些限制,您可以看看NetOffice,它实际上与Microsoft Office提供的功能相同,但它可以帮助您更轻松地处理对象。

http://netoffice.codeplex.com/

老实说,如果你在微软或NetOffice论坛上发布问题,任何涉及微软互操作的程序都将是付费服务,你不会得到那么快的回复。那样的话,你就得自己抬头看看了。现在对于OpenXML:http://openxmldeveloper.org/我无法告诉你太多关于它的信息,因为使用它需要更多的时间和知识,但你会发现很多关于如何使用它以及如何处理对象/替换对象的视频。作为OpenXML的支持者,它成为了标准,并由微软论坛的管理员重新推荐。Con of Microsoft Office Interop->服务器管理和自动化将不起作用,具体取决于服务器配置。此外,您可能会面临许多COM设置和权限方面的问题,这将导致大量的调试时间。我希望,我可以告诉你更多关于OpenXML的信息,但没有时间深入研究它

现在,关于您在C#中的问题,如果您计划使用Microsoft.Office.Interop,您可以首先将库下载/集成到您的Visual Studio中。现在,下面的代码将帮助您打开一个文件,浏览工作表,浏览行/列并保存它

代码:

using Excel = NetOffice.ExcelApi;
Excel.Application xlsApp = new Excel.Application();

或:

Microsoft.Office.Interop.Excel.Application excel = null;
Microsoft.Office.Interop.Excel.Workbook xls = null;
excel = new Microsoft.Office.Interop.Excel.Application();
            object missing = Type.Missing;
            object trueObject = true;
            excel.Visible = false;
            excel.DisplayAlerts = false;
            xls = excel.Workbooks.Open(excelFile, missing, trueObject, missing,
                    missing, missing, missing, missing, missing, missing, missing, missing,
                    missing, missing, missing);

您可以在两者之间进行选择。但我会选择微软的

try
{
                // Must be surrounded by try catch to work.
                // http://naimishpandya.wordpress.com/2010/12/31/hide-power-point-application-window-in-net-office-automation/
                xlsApp.Visible = true;
                xlsApp.DisplayAlerts = false;
}
catch (Exception e)
{
                Console.WriteLine("-------Error hiding the application-------");
                Console.WriteLine("Occured error might be: " + e.StackTrace);
}
Excel.Workbook workbook;
workbook = xlsApp.Workbooks.Open(configuration.XLSExportedFile, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
                                            Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
                                            Type.Missing, Type.Missing);

现在,你想在工作表或工作表中的形状之间移动:

foreach (Excel.Worksheet sheet in workbook.Sheets)
{
     workbook.Activate();
     sheet.Activate();
     foreach (Excel.Shape shape in sheet.Shapes)
     {
     }
}

现在,如果你想把一些值粘贴到一个特定的范围内,可以这样做:

sheet.Range(cellmapp).PasteSpecial();

例如,在cellmapp中,可以使用A1:B2的范围。为了将值自动调整为单元格大小,您可以执行以下代码:

sheet.Columns.AutoFit();
sheet.Rows.AutoFit();

现在,一旦你完成了所有的修改过程,这对COM来说非常重要,请始终关闭它们。

workbook.SaveAs(File);
workbook.Close();
xlsApp.Quit(); 
xlsApp.Dispose();

如果您担心某些Excel进程被卡住,请使用

private void ManageXLSProcesses()
{
        Process[] processes = System.Diagnostics.Process.GetProcessesByName("Excel");
        foreach (Process p in processes)
            p.Kill();
}

但是你应该避免用苛刻的方式去做。如果您使用COM或OpenXML,您可以选择哪种方式,但未来将是OpenXML,因为Microsoft Office Interop很容易编写,但在运行时很难处理。这应该让您对即将编写的代码有一个概述。自行选择实施方式。很好的建议,花更多的时间研究OpenXML,因为它是一种标准,因为随着最新版本的Microsoft Office 2013++的推出,COM管理将在未来变得更加苛刻。

Interop是可以实现的,请检查此链接http://www.dotnetperls.com/excel。你可以通过excel进行过滤,也可以将所有列加载到自己的对象中,然后用C#进行过滤,无论你喜欢什么。