精华内容
下载资源
问答
  • c#写excel
    千次阅读
    2021-03-31 15:31:55

    一、简述:

            因为一些需要,需要使用excel读写,之前采用csv文件方式读写有些局限,而且,因为最近这台电脑的office组件右问题,这个方法用不了了。所以,得探索一下Excel新的读取方式,留个记录以便日后查看。

           方式1:使用office组件, Microsoft.Office.Interop.Excel

           方式2:使用NPOI组件,

           方式3:使用OleDB组件,

     

    二、详细介绍

           方式1:使用office的COM组件, Microsoft.Office.Interop.Excel

            依赖:1.需要安装Excel;2.需要添加Microsoft.Office.Interop.Excel 的dll引用 。

            使用体验;可以灵活的操作单个单元格,但读写比较慢(数据量大的时候)。数据量较少还是可以用的。数据量大的时候按行读写可以快点,但。。。只是快点。

            官方文档:https://docs.microsoft.com/zh-cn/dotnet/api/microsoft.office.interop.excel?view=excel-pia

            使用方法:手头没有现成代码。借鉴(抄)了一下别人的,未验证手头电脑不好使没有excel。

                         链接在此,建议看原文,我的只是用来给自己备忘的  。

                         C#读写Excel(Com组件的方式):https://blog.csdn.net/qq_33459369/article/details/79314465

                         C#读写Excel的几种方法:https://blog.csdn.net/u010593753/article/details/89676558

    	//开头引用
        using Microsoft.Office.Interop.Excel;
    
        //引用定义
        Microsoft.Office.Interop.Excel.Application app;
    	Microsoft.Office.Interop.Excel.Workbooks wbs;
    	Microsoft.Office.Interop.Excel.Worksheet ws;
    
        string fileName ="D:\\test.xls";
    	object oMissiong = System.Reflection.Missing.Value;
        app = new Microsoft.Office.Interop.Excel.Application();
        wbs = app.Workbooks;
        
        wbs.Open(fileName, oMissiong, oMissiong, oMissiong, oMissiong, oMissiong, oMissiong, oMissiong, oMissiong, oMissiong, oMissiong, oMissiong, oMissiong, oMissiong, oMissiong);
        ws = app.Worksheets.get_Item(1);
        ws .Cells[1, 1] = "test";
        wbs.SaveAs(fileName , oMissiong , oMissiong, oMissiong, oMissiong, oMissiong,XlSaveAsAccessMode.xlNoChange,oMissiong, oMissiong, oMissiong, oMissiong, oMissiong);
    
        ClosePro(app, wbs);
    
        //关闭进程
        public void ClosePro(Excel.Application xlApp, Excel.Workbook xlsWorkBook)
            {
                if (xlsWorkBook != null)
                    xlsWorkBook.Close(true, Type.Missing, Type.Missing);
                xlApp.Quit();
                // 安全回收进程
                System.GC.GetGeneration(xlApp);
                IntPtr t = new IntPtr(xlApp.Hwnd);   //获取句柄
                int k = 0;
                GetWindowThreadProcessId(t, out k);   //获取进程唯一标志
                System.Diagnostics.Process p = System.Diagnostics.Process.GetProcessById(k);
                p.Kill();     //关闭进程
            }
    

           方式2:使用NPOI组件

            参考源:   NPOI使用手册    https://www.cnblogs.com/joean/p/4661056.html

                              NPOI使用教程附Helper  https://www.cnblogs.com/wyy1234/p/10039767.html

            NPOI.Util           基础辅助库
            NPOI.POIFS     OLE2格式读写库
            NPOI.DDF         Microsoft Drawing格式读写库
            NPOI.SS           Excel公式计算库
            NPOI.HPSF      OLE2的Summary Information和Document Summary Information属性读写库
            NPOI.HSSF      Excel BIFF格式读写库

            注意留意.net 和NPOI版本。

     

     

           方式3:使用OleDB组件

     

     

         ......

         临时有事,下次接着写。

    更多相关内容
  • C# 读写 Excel

    2015-10-20 16:42:58
    C# 导入导出Excel,开发环境 vs2010
  • Excel操作类,用于C#Excel进行读写,简单易用。
  • C# 写excel

    2014-05-19 17:32:23
    C#打开excel模板并在指定单元格写入值
  • C#读写Excel表格

    千次阅读 2022-04-18 14:36:31
    /// <summary> /// 读取表格 /// </summary> /// <param name="excelPath"></param> /// <... static DataSet ExcelGetDataTable(string excelPath) ... //处理格式..
     /// <summary>
            /// 读取表格
            /// </summary>
            /// <param name="excelPath"></param>
            /// <returns></returns>
            static DataSet ExcelGetDataTable(string excelPath)
            {
                //处理格式
                System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance);
    
                IExcelDataReader excelReader = null;
    
                using (FileStream stream = new FileStream(excelPath, FileMode.Open, FileAccess.Read))定义文件流
                {
                    //首先判断传入的.xls文件还是xlsx文件
                    int index = excelPath.LastIndexOf('.');//获取文件扩展名前‘.’的位置
                    string extensionName = excelPath.Substring(index + 1);
                    if (extensionName == "xls")
                    {
                        //传入的xls文件---->97-2003format
                        excelReader = ExcelReaderFactory.CreateBinaryReader(stream);
                    }
                    if (extensionName == "xlsx")
                    {
                        //传入的是xlsx文件---->2007 format
                        excelReader = ExcelReaderFactory.CreateOpenXmlReader(stream);
                    }
                    //1、DataSet----每个电子表格的结果将在结果表中创建
                    DataSet result = excelReader.AsDataSet();
                    stream.Close();
                    return result;
                }
            }
    static void Main(string[] args)
            {
                //定义路径
                string str = @"E:\测试.xlsx";
    
                DataSet dataList = ExcelGetDataTable(str);//接受读取的数据
    
                #region 读取全部数据 外层循环行 内层循环列
    
                string arriveDataTime = dataList.Tables[0].Rows[0][1].ToString();
    
                //dataList.Tables[0]代表第一张表格
                //获取有多少列
                int col = dataList.Tables[0].Columns.Count;
                //获取有多少行
                int row = dataList.Tables[0].Rows.Count;
    
                for (int i = 0; i < row; i++)
                {
                    for (int j = 0; j < col; j++)
                    {
                        Console.WriteLine(dataList.Tables[0].Rows[i][j].ToString());
                    }
                    Console.WriteLine();
                }
                #endregion
    
                Console.ReadLine();
            }

    在依赖中需要添加这两个包 

    以上只是读取操作,只不过这个有个小问题 虽然已经释放了进程 ,但是有时候还是会被占用进程

     /// <summary>
            /// 写入表格
            /// </summary>
            /// <param name="row">列</param>
            /// <param name="con">行</param>
            static void setValue(int row,int con,string value)
            {
                //当前路径
                string importExcelPath = @"E:\测试.xlsx";
                //要保存的路径
                string exportExcelPath = @"E:\测试.xlsx";
    
                var workbook = new XLWorkbook(importExcelPath);
    
                IXLWorksheet sheet = workbook.Worksheet(1);//这个库也是从1开始
                                                           //设置第一行第一列值,更多方法请参考官方Demo
                
                sheet.Cell(row, con).Value = value;//写入值
    
                workbook.SaveAs(exportExcelPath);
            }

     

    展开全文
  • C#写excel控制台程序

    2020-08-13 17:30:46
    一个C# 写excel的简单小例子,包括当条件不满足时如何设置某行的背景颜色。
  • C#读写Excel文件

    2015-11-18 16:39:01
    利用C#开发的上位机界面,操作Office2010 Excel文件,以通过可测
  • NPOI是开源的POI项目的.NET版,可以用来读写Excel,Word,PPT等文件。在处理Excel文件上,NPOI 可以同时兼容 xls 和 xlsx。官网提供了一份 Examples,给出了很多应用场景的例子,打包好的二进制文件类库,也仅有几MB...
  • c#读写excel

    2011-12-08 09:15:42
    c#实现excel的基本操作,如读写excel表格的数据。
  • C#读写Excel的4种方案(OpenXml、NPOI、EPPlus、Spire.Office)

    在项目中需要使用C#读写Excel,每天定时将数据输出到Excel表格中。在参考了很多的方案后,找到了4个常用的方案,并提供了一些小Demo。更多功能和示例可以参考官方文档。

    1、Microsoft.Office.Interop.Excel:不推荐使用。

    2、OpenXml:微软官方提供的SDK。

    3、NPOI:第三方开源框架,口碑很好。

    4、EPPlus:只能用于读写Excel,笔者目前使用最多。

    5、Spire.Office for .NET:商业解决方案,功能完善强大。免费版功能也够用。


    IDE:Visual Studio 2019 和 Visual Studio 2022

    框架:.NET Framework 4.8 和 .NET 6.0


    1、Microsoft.Office.Interop.Excel

    最原始的操作库,兼容性一般,偶尔会出现内存泄漏和文件无法解除占用的问题(也可能是我太菜),不推荐使用。

    2、OpenXml

    GitHub:GitHub - OfficeDev/Open-XML-SDK: Open XML SDK by Microsoft

    NuGet:NuGet Gallery | DocumentFormat.OpenXml 2.14.0

    微软官方提供的一个SDK用于读写Office。

    官方文档:Welcome to the Open XML SDK 2.5 for Office | Microsoft Docs

    3、NPOI

    在Java中,有Apache POI这样一个API用于操作Office。

    Java POI:Apache POI - the Java API for Microsoft Documents

    在C#中,有开源免费的NPOI。虽然不知道二者有什么关系,但总感觉很相似。

    GitHub:GitHub - nissl-lab/npoi

    NuGet:NuGet Gallery | NPOI 2.5.5

    使用方法:

    public void TestNPOI()
    {
        string sourceFile = @"D:\sourceFile.xlsx";
        string targetFile = @"D:\targetFile.xlsx";
    
        IWorkbook workbook = new XSSFWorkbook(sourceFile);
        ISheet sheet1 = workbook.GetSheet("Sheet1");
    
        sheet1.CreateRow(0).CreateCell(0).SetCellValue(1);
        sheet1.CreateRow(1).CreateCell(0).SetCellValue(2);
        sheet1.CreateRow(2).CreateCell(0).SetCellValue(3);
    
        FileStream fs = new FileStream(targetFile, FileMode.Create);
        workbook.Write(fs);
        workbook.Close();
    }

    NPOI在使用过程中有些不习惯,特别是在设置单元格内容时,和传统的思维方式不太一样。

    4、EPPlus

    官方网站:Excel spreadsheet library for .NET Framework/Core - EPPlus Software

    GitHub:EPPlus Software · GitHub

    NuGet:NuGet Gallery | EPPlus 5.8.3

    EPPlus通过LicenseContext来区分商业应用(Commercial)和非商业应用(NonCommercial)。

    使用方法:

    public void TestEPPlus()
    {
        string sourceFile = @"D:\sourceFile.xlsx";
        string targetFile = @"D:\targetFile.xlsx";
    
        ExcelPackage.LicenseContext = LicenseContext.NonCommercial;//指明非商业应用
        ExcelPackage package = new ExcelPackage(sourceFile);//加载Excel工作簿
        ExcelWorksheet sheet1 = package.Workbook.Worksheets["Sheet1"];//读取工作簿中名为"Sheet1"的工作表
    
        sheet1.Cells[1, 1].Value = "A";//设置单元格内容
        sheet1.Cells[2, 2].Value = "B";
        sheet1.Cells[3, 3].Value = "C";
    
        sheet1.Cells[1, 2].Value = "1";
        sheet1.Cells[2, 2].Value = "2";
        sheet1.Cells[3, 2].Value = "3";
    
        //package.Save();//将更改保存到原文件
        package.SaveAs(targetFile);//将更改保存到新的文件,类似于另存为
    }

    笔者目前使用最多的框架,操作简单,符合使用习惯。但是EPPlus只能用于读写Excel,不能读写Word等其他文件。

    5、Spire.Office for .NET

    官方网站:C#/VB.Net Excel, Word, PowerPoint, PDF Component

    GitHub:eiceblue (E-iceblue Product Family) · GitHub

    NuGet:NuGet Gallery | FreeSpire.Office 4.3.1

    Spire.Office提供了一整套的Office解决方案,可以读写、展示Word、Excel、PDF等。分为收费版和免费版。

    使用方法:

    public void TestSpireOffice()
    {
        string sourceFile = @"D:\sourceFile.xlsx";
        string targetFile = @"D:\targetFile.xlsx";
    
        Workbook workbook = new Workbook();
        workbook.LoadFromFile(sourceFile);//加载Excel工作簿
        Worksheet sheet1 = workbook.Worksheets["Sheet1"];//读取工作簿中名为"Sheet1"的工作表
    
        sheet1.SetCellValue(1, 1, "A");//设置单元格内容
        sheet1.SetCellValue(2, 1, "B");
        sheet1.SetCellValue(3, 1, "C");
    
        sheet1.SetCellValue(1, 2, "1");
        sheet1.SetCellValue(2, 2, "2");
        sheet1.SetCellValue(3, 2, "3");
    
        workbook.Save();//将更改保存到原文件
        workbook.SaveToFile(targetFile);//将更改保存到新的文件,类似于另存为
    }

    Spire.Office的收费版可以在WinForm中直接展示Word、Excel、PDF文件内容,但是免费版不能展示Excel。一种替代方式是先将Excel转换成PDF,再展示PDF,但这种方案只能展示前三页。


    总结:

    以上介绍的5中方案中,笔者最常使用的是EPPlusSpire.Office。毕竟是商业软件,体验确实不一样。免费版功能够用即可。

    如果只是需要读写Excel,那么EPPlus非常方便而且符合使用习惯。

    如果需要在WinForm中展示,那么Spire.Office可能是唯一选择。

    如果需要读写多种Word、Excel等Office文件,OpenXml和NPOI也是不错的选择。


    写完文章发现了一个网站,也介绍了许多关于C#读写Office的各种方法,比我写的详细多了,推荐给大家。

    OpenXml:Read/Write Excel file using C# .NET Core | TheCodeBuzz

    NPOI:Read and Write Excel file in C# .NET Core using NPOI | TheCodeBuzz

    EPPlus:Read/Write Excel file in C# .NET Core using EPPlus | TheCodeBuzz

    展开全文
  • c#代码读写excel数据demo,能实现读写EXCEL表格的数据。
  • C# 编写的操作Excel读取/写入动态库(COM/NPOI两种方式),个人推荐使用NPOI方式,因为COM方式存在无法关闭Excel进程的情况(个人体验COM方式效率有点低)。。。已设置0分,资源自取。
  • C#读写Excel文件(一)

    万次阅读 多人点赞 2018-11-29 20:39:41
    1、加入相应的COM组件 在Winform程序中对Word进行操作需要引入相关的COM... 在对应的CS文件中使用其名字空间, ...using System.Reflection;...using MSWord=Microsoft.Office.Interop. Excel using Microsoft.Off...

    1、加入相应的COM组件

    在Winform程序中对Word进行操作需要引入相关的COM组件。如果安装的office2007则引入12.0版本的COM组件,如下图所示:

    在对应的CS文件中使用其名字空间,

    using System.Reflection;

    using MSWord=Microsoft.Office.Interop. Excel

    using Microsoft.Office.Core;

    using System.IO;

     

    2、打开及关闭Excel文件

    string strDir = Directory.GetCurrentDirectory();

    string fileName = strDir + @"\test.xls";

    MSExcel.Application excelApp= new MSExcel.Application();

    excelApp.Visible = true;//是打开可见

    MSExcel.Workbooks wbks = excelApp.Workbooks;

    MSExcel._Workbook wbk = wbks.Add(fileName);

    wbk.Close();//关闭文档

    wbks.Close();//关闭工作簿

    excelApp.Quit();//关闭excel应用程序

    System.Runtime.InteropServices.Marshal.ReleaseComObject(excelApp);//释放excel进程

    excelApp = null;

     

    3、对工作表的操作

     

    string strDir = Directory.GetCurrentDirectory();

    string fileName = strDir + @"\test.xls";

    MSExcel.Application excelApp= new MSExcel.Application();

    excelApp.Visible = true;//是打开可见

    MSExcel.Workbooks wbks = excelApp.Workbooks;

    MSExcel._Workbook wbk = wbks.Add(fileName);

     

    MSExcel._Worksheet whs;

    whs = wbk.Sheets[1];//获取第一张工作表

    string sheetName = whs.Name;//工作表名称

    int Rowcount = whs.Rows.Count;//工作表行数

    whs = wbk.Sheets[2];

    whs.Activate();//激活工作表

     

    MSExcel.Sheets shs = wbk.Sheets;//获取工作表

    //whs = (MSExcel.Worksheet)shs.get_Item(3);//获取第三张工作表

    excelApp.DisplayAlerts = false;

    //whs.Delete();//删除第三章工作表

    //wbk.Save();

     

    whs = (MSExcel.Worksheet)shs.get_Item(3);//获取第三张工作表

    whs.Name = "计算机";//重命名工作表

    excelApp.DisplayAlerts = false;//不弹出是否保存的对话框

    wbk.SaveCopyAs(strDir + @"\新建文件.xls");

     

    4、对工作表行列的操作

     

    string strDir = Directory.GetCurrentDirectory();

    string fileName = strDir + @"\test.xls";

    MSExcel.Application excelApp= new MSExcel.Application();

    excelApp.Visible = true;//是打开可见

    MSExcel.Workbooks wbks = excelApp.Workbooks;

    MSExcel._Workbook wbk = wbks.Add(fileName);

     

    object Nothing = Missing.Value;

    MSExcel._Worksheet whs;// = wbk.Sheets.Add(Nothing, Nothing, Nothing, Nothing);

    whs = wbk.Sheets[1];//获取第一张工作表

    whs.Activate();

    //((MSExcel.Range)whs.Rows[1, Nothing]).Delete(MSExcel.XlDeleteShiftDirection.xlShiftUp);//删除工作表第一行

     

    //((MSExcel.Range)whs.Cells[whs.Rows.Count, 2]).Delete(MSExcel.XlDeleteShiftDirection.xlShiftToLeft);//删除工作表第二列

    ((MSExcel.Range)whs.Rows[3, Missing.Value]).RowHeight = 5;//设置行高

    ((MSExcel.Range)whs.Rows[3, Missing.Value]).ColumnWidth = 5;//设置列宽

     

    5、对工作表单元格的操作

    string strDir = Directory.GetCurrentDirectory();

    string fileName = strDir + @"\test.xls";

    MSExcel.Application excelApp= new MSExcel.Application();

    excelApp.Visible = true;//是打开可见

    MSExcel.Workbooks wbks = excelApp.Workbooks;

    MSExcel._Workbook wbk = wbks.Add(fileName);

     

    object Nothing = Missing.Value;

    MSExcel._Worksheet whs;// = wbk.Sheets.Add(Nothing, Nothing, Nothing, Nothing);

    whs = wbk.Sheets[1];//获取第一张工作表

    whs.Activate();

    MSExcel.Range rang = (MSExcel.Range)whs.Cells[2, 2];//单元格B2

    string content = rang.Text;//该单元格文本

    double height = rang.Height;//单元格的高度

    double width = rang.Width;//单元格的宽度

    whs.Cells[2, 12] = "=A2&B2";//设置公式

    whs.Cells[2, 13] = "I love C#";//设置内容

    rang = whs.get_Range("A1","B2");

    rang.Merge(Nothing) ;//单元格合并

    展开全文
  • C#操作excel 打开-读取-修改-保存 winform入门操作 适合入门读者
  • VS 2008 C#读写excel文件

    2013-06-25 00:14:09
    可选择打开任意excel表格,并将其中内容读取至界面显示,点击按钮修改excel中内容,是先excel读写示例。
  • c#读写EXcel数据

    2012-11-28 23:31:43
    c# 导入 导出 EXcel表.2、将DataGrid控件中的数据导出Execl
  • c#写excel源代码

    2010-07-29 21:36:21
    This article will help to write data to Excel using C# without playing with Excel.Application. With the help of the ExcelFileWriter class, it is very easy to write data to an Excel sheet.
  • C#读写EXCEL(OLEDB方式)

    千次阅读 2018-10-29 09:26:20
    用OLEDB方式读取EXCEL的速度是非常快的。但是当Excel数据量很大时。会非常占用内存,当内存不够时会抛出内存溢出的异常。   OLEDB方式将Excel作为一个数据源,直接用Sql语句操作数据,并且不需要安装Office Excel...
  • C# 导入Excel文件到ListView和导出ListView到Excel文件
  • C#读写Excel(Com组件的方式)

    万次阅读 2018-02-12 08:56:40
    这种方式需要先引用 Microsoft.Office.Interop.Excel 。可以非常灵活的读取Excel中的数据,而且使用方式很丰富,基本上凡是打开Office Excel软件能够用鼠标点击完成的事,使用VSTO调用COM组件都能完成,而且可以...
  • C#读写Excel2003和Excel2007 C#读写Excel2003和Excel2007 C#读写Excel2003和Excel2007 C#读写Excel2003和Excel2007 C#读写Excel2003和Excel2007
  • C#之NPOI读写Excel

    千次阅读 2020-03-12 15:28:40
    NPOI是一个开源的C#读写Excel、WORD等微软OLE2组件文档的项目。 使用NPOI的优势 1、您可以完全免费使用该框架 2、包含了大部分EXCEL的特性(单元格样式、数据格式、公式等等) 3、专业的技术支持服务(24*7全天候) (非...
  • C#读写Excel和Word文件

    热门讨论 2008-10-09 19:38:51
    实现C#读写Excel和Word文件基本操作,可以读写Word文件和读出Excel中的数据并实现Excel与数据库的导入与导出
  • c#读写excel,对excel文件的读\\改
  • C#读写Excel

    2010-09-25 15:09:48
    微软的Excel对象模型包括了128个不同的对象,从矩形,文本框等简单的对象到透视表,图表等复杂的对象.下面我们简单介绍一下其中最重要,也是用得最多的四个对象。
  • C#读写EXCEL文件的利器

    2010-03-15 15:06:52
    FlexCel是一款灵活、易用的表格和报表控件,提供了6种单元格类型和6种图表类型,提供了合并单元格、虚表、打印和打印预览等功能,支持剪贴板操作、导入和导出XML文件、导出CSV/HTML/PDF文件,不需要Excel运行库支持...
  • asp.net 2010 C# 读写EXCEL

    2012-03-22 23:53:57
    asp.net 2010 C# 读写EXCEL 无需安装EXCEL 有问题联系QQ:7600249 解压密码:shift+123456
  • 主要介绍了C#连接Excel驱动与示例代码,需要的朋友可以参考下

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 53,322
精华内容 21,328
关键字:

c#写excel