C#操作Excel文件(读取Excel,写入Excel)

看到论坛里面不断有人提问关于读取excel和导入excel的相关问题。闲暇时间将我所知道的对excel的操作加以总结,现在共享大家,希望给大家能够给大家带了一定的帮助。
另外我们还要注意一些简单的问题1.excel文件只能存储65535行数据,如果你的数据大于65535行,那么就需要将excel分割存放了。2.关于乱码,这主要是字符设置问题。

1.加载Excel(读取excel内容)返回值是一个DataSet

//加载Excel
        public static DataSet LoadDataFromExcel(string filePath)
        {
            try
            {
                string strConn;
                strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filePath + ";Extended Properties='Excel 8.0;HDR=False;IMEX=1'";
                OleDbConnection OleConn = new OleDbConnection(strConn);
                OleConn.Open();
                String sql = "SELECT * FROM  [Sheet1$]";//可是更改Sheet名称,比如sheet2,等等

OleDbDataAdapter OleDaExcel = new OleDbDataAdapter(sql, OleConn);
                DataSet OleDsExcle = new DataSet();
                OleDaExcel.Fill(OleDsExcle, "Sheet1");
                OleConn.Close();
                return OleDsExcle;
            }
            catch (Exception err)
            {
                MessageBox.Show("数据绑定Excel失败!失败原因:" + err.Message, "提示信息",
                    MessageBoxButtons.OK, MessageBoxIcon.Information);
                return null;
            }
        }
2.写入Excel内容,参数:excelTable是要导入excel的一个table表

public static bool SaveDataTableToExcel(System.Data.DataTable excelTable, string filePath)
        {
            Microsoft.Office.Interop.Excel.Application app =
                new Microsoft.Office.Interop.Excel.ApplicationClass();
            try
            {
                app.Visible = false;
                Workbook wBook = app.Workbooks.Add(true);
                Worksheet wSheet = wBook.Worksheets[1] as Worksheet;
                if (excelTable.Rows.Count > 0)
                {
                    int row = 0;
                    row = excelTable.Rows.Count;
                    int col = excelTable.Columns.Count;
                    for (int i = 0; i < row; i++)
                    {
                        for (int j = 0; j < col; j++)
                        {
                            string str = excelTable.Rows[i][j].ToString();
                            wSheet.Cells[i + 2, j + 1] = str;
                        }
                    }
                }

int size = excelTable.Columns.Count;
                for (int i = 0; i < size; i++)
                {
                    wSheet.Cells[1, 1 + i] = excelTable.Columns[i].ColumnName;
                }
                //设置禁止弹出保存和覆盖的询问提示框
                app.DisplayAlerts = false;
                app.AlertBeforeOverwriting = false;
                //保存工作簿
                wBook.Save();
                //保存excel文件
                app.Save(filePath);
                app.SaveWorkspace(filePath);
                app.Quit();
                app = null;
                return true;
            }
            catch (Exception err)
            {
                MessageBox.Show("导出Excel出错!错误原因:" + err.Message, "提示信息",
                    MessageBoxButtons.OK, MessageBoxIcon.Information);
                return false;
            }
            finally
            {
            }
        }

C#实现在Excel中将连续多列相同数据项合并

效果图如下:

代码如下:

/** <summary>
        /// 合并工作表中指定行数和列数数据相同的单元格
        /// </summary>
        /// <param name="sheetIndex">工作表索引</param>
        /// <param name="beginRowIndex">开始行索引</param>
        /// <param name="beginColumnIndex">开始列索引</param>
        /// <param name="rowCount">要合并的行数</param>
        /// <param name="columnCount">要合并的列数</param>
        public void MergeWorkSheet(int sheetIndex,int beginRowIndex,int beginColumnIndex,int rowCount,int columnCount)
        {

//检查参数
            if ( columnCount < 1 || rowCount < 1)
                return ;

for(int col=0;col<columnCount;col++)
            {
                int mark = 0;            //标记比较数据中第一条记录位置
                int mergeCount = 1;        //相同记录数,即要合并的行数
                string text = "";
               
                for(int row=0;row<rowCount;row++)
                {
                    string prvName = "";
                    string nextName = "";

//最后一行不用比较
                    if( row + 1 < rowCount)       
                    {
                        for(int n=0;n<=col;n++)
                        {
                            range = (Excel.Range)workSheet.Cells[row + beginRowIndex,n + beginColumnIndex];
                            range = (Excel.Range)range.MergeArea.get_Item(1,1);
                            text = range.Text.ToString();
                            prvName = prvName + text;

range = (Excel.Range)workSheet.Cells[row + 1 + beginRowIndex,n + beginColumnIndex];
                            range = (Excel.Range)range.MergeArea.get_Item(1,1);
                            nextName = nextName + range.Text.ToString();

}
                           
                        if(prvName == nextName)
                        {
                            mergeCount++;

if(row == rowCount - 2)
                            {
                                this.MergeCells(sheetIndex,beginRowIndex + mark,beginColumnIndex + col,beginRowIndex + mark + mergeCount - 1,beginColumnIndex + col,text);
                            }
                        }
                        else
                        {
                            this.MergeCells(sheetIndex,beginRowIndex + mark,beginColumnIndex + col,beginRowIndex + mark + mergeCount - 1,beginColumnIndex + col,text);
                            mergeCount = 1;
                            mark = row + 1;
                        }
                           
                    }       
                }
            }
        }

转载于:https://www.cnblogs.com/ly5201314/archive/2009/06/06/1497448.html

C#操作Excel文件暨C#实现在Excel中将连续多列相同数据项合并相关推荐

  1. php原生读取excel文件夹,原生php实现excel文件读写的方法分析php技巧

    这篇文章主要介绍了原生php实现excel文件读写的方法,结合实例形式分析了采用原生php针对Excel进行读写操作的相关实现方法与操作注意事项,需要的朋友可以参考下 本文实例分析了原生php实现ex ...

  2. 用pandas生成excel文件示例,并调整excel的格式或样式

    用pandas生成excel 当我们有特殊的需求时,比如要修改excel的行宽列宽,还有字体样式等等 需求示例 代码实现 # -*- coding: utf-8 -*- import pandas a ...

  3. python如何创建excel文件_Python xlrd/xlwt 创建excel文件及常用操作

    一.创建excel代码 备注:封装好了(可直接调用) """ -*- coding:utf-8 -*- @Time :2020/8/20 21:02 @Author :J ...

  4. 如何用Apache POI操作Excel文件-----如何在已有的Excel文件中插入一行新的数据?

    在POI的第一节入门中,我们提供了两个简单的例子,一个是如何用Apache POI新建一个工作薄,另外一个例子是,如果用Apache POI新建一个工作表.那么在这个章节里面,我将会给大家演示一下,如 ...

  5. java导出为excel文件_java导出数据到excel文件

    有的时候,将一些有用的数据导出到excel是很有必要的.比如说,我现在在做一个学校的在线教学平台,有一个需求是:将学生成绩导出到excel文件中去. 那怎样实现用java导出数据到excel文件呢?? ...

  6. 怎么用python处理excel文件-如何用python处理excel表格

    openpyxl是一个第三方库,可以处理xlsx格式的Excel文件.pip install openpyxl安装. 读取Excel文件 需要导入相关函数 from openpyxl import l ...

  7. 打开excel文件并写入_双击Excel表格文件时只打开程序不能直接打开文件

    故障描述:双击EXCEL表格文件时仅打开了excel窗口,对应文件不能直接打开文件 ,需通过文件--打开--选中文件来打开. 打开excel后不显示文件内容 注意事项:遇到此类问题时首先通过" ...

  8. python怎么打开excel文件并处理_python处理excel文件

    python操作excel主要用到xlrd和xlwt这两个库,即xlrd是读excel,xlwt是写excel的库. 可从这里下载https://pypi.python.org/pypi.下面分别记录 ...

  9. php删除excel文件,PHPExcel:HTML到Excel,写入删除excel文件中的CSS

    我想导出(强制下载) HTML(带CSS)到EXCEL表,现在我使用 PHPExcel库来执行此操作,它生成excel文件但删除CSS(使用内联html标签),任何人都可以指导我,如何将CSS保存在E ...

最新文章

  1. linux expect 输入密码,shell脚本无密码登录 expect的使用方法详解
  2. 算法和编程面试题精选 TOP50!(附代码+解题思路+答案)
  3. SQL Server遍历表中记录的2种方法
  4. 使用dx命令在cmd环境下执行的正确方法,我用的版本android4.4.2,jdk1.8
  5. 一)golang的单例模式
  6. 常用 MySQL 操作
  7. 关于VLAN Tag,PVID的问题
  8. 重装系统后git库不能使用_重装系统后git库初始化
  9. [leetcode] 379. Design Phone Directory 解题报告
  10. cents7安装docker并部署nginx、mysql容器
  11. 第七章 NoSQL数据库技术(二)
  12. sql server 2008 r2 忘记sa密码, 没有window账户登录, 解决办法
  13. android opengl ppt,Opengl example.ppt
  14. C语言if和汇编jcc程序对比,汇编 JCC指令表与笔记
  15. 关于如何实现Ubuntu系统的中英文输入法切换
  16. Linux解压命令汇总
  17. 压力式泡沫比例混合装置生产厂家分析工作原理数据说明
  18. linux生物代谢图软件,答疑解惑专题(四)——开源代谢组学全功能软件介绍
  19. 关于WMV格式文件的解析
  20. BBB板 --重装操作系统

热门文章

  1. 操作系统基础知识笔记
  2. chrome开发者工具各种骚技巧
  3. 常用 SQL Server 规范集锦
  4. 贝叶斯分析好坏_贝叶斯统计 | 第五章第一部分 决策基本概念
  5. 进程间通信IPC(一)(半双工管道和消息队列)
  6. html5 filereader读取文件,H5的FileReader分布读取文件应该如何使用以及其方法简介...
  7. 通过栈(Stack)实现对树的遍历
  8. Java 按位运算符(,|,^,,)
  9. 尤大是如何发布vuejs的,学完可以应用到项目
  10. Android Studio中解决jar包重复依赖导致的代码编译错误