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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/299942.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

猪肉上的红章和蓝章有啥不同?| 今日趣图

全世界只有3.14 %的人关注了青少年数学之旅亲眼看到金字塔你才会意识到它有多大&#xff01;&#xff08;图源光消失的地方&#xff0c;侵权删&#xff09;你女朋友的脸皮有多厚&#xff1f;&#xff08;图源程序员新视界&#xff0c;侵权删&#xff09;猪肉上的红章和蓝章有啥…

如何避免和人尬聊?

全世界只有3.14 %的人关注了青少年数学之旅想要和别人有聊不完的话题&#xff1f;当然是多读书多看新闻了解新鲜有趣的事物啦如果你没有时间去阅读那么关注以下公号将会让你收获更多信息~长按二维码&#xff0c;选择“识别图中二维码”订阅。▼看鉴ID:kanjian6666▲长按二维码“…

java 中的 io 系统总结

Java 流在处理上分为字符流和字节流。字符流处理的单元为 2 个字节的 Unicode 字符&#xff0c;分别操作字符、字符数组或字符串&#xff0c;而字节流处理单元为 1 个字节&#xff0c;操作字节和字节数组。 Java 内用 Unicode 编码存储字符&#xff0c;字符流处理类负责将外部的…

在VS Code中执行SQL查询,是怎样一种体验?

上次&#xff0c;我们演示了“如何使用Nuget包XPlot.Plotly.Interactive在.NET Interactive notebook中绘制图表”。这次&#xff0c;我们使用Nuget包Microsoft.DotNet.Interactive.SqlServer演示在.NET Interactive notebook中如何和SQL Server交互。安装Nuget包首先&#xff…

UVA 11090 Going in Cycle!! 二分答案 + bellman-ford

求平均值最小的环&#xff0c;如果平均值最小为x&#xff0c;则如果把每条边的权值都减(x1)&#xff0c;那么新图将会有负环&#xff0c;用bellman ford判断。 //#pragma comment(linker, "/STACK:1024000000,1024000000") #include<cstdio> #include<cstri…

大数据:数据合集,你想要的或许这里都有

大数据时代&#xff0c;用数据做出理性分析显然更为有力。做数据分析前&#xff0c;能够找到合适的的数据源是一件非常重要的事情&#xff0c;获取数据的方式有很多种&#xff0c;不必局限。下面将从公开的数据集、爬虫、数据采集工具、付费API等等介绍。给大家推荐一些能够用得…

MVC5 - ASP.NET Identity登录原理 - Claims-based认证和OWIN

在Membership系列的最后一篇引入了ASP.NET Identity&#xff0c;看到大家对它还是挺感兴趣的&#xff0c;于是来一篇详解登录原理的文章。本文会涉及到Claims-based&#xff08;基于声明&#xff09;的认证&#xff0c;我们会详细介绍什么是Claims-based认证&#xff0c;它与传…

一步一步SharePoint 2007之四十三:实现自定义Workflow(2)——设置配置文件

下面将记录每一步的操作过程。1、首先采用Reflector等工具找到上一篇文章编译后的DLL的Assembly信息。2、找到并打开C:\Inetpub\wwwroot\wss\VirtualDirectories\9001\web.config文件&#xff0c;在System.Workflow.ComponentModel.WorkflowCompiler节点下的authorizedTypes中&…

动手造轮子 —— dotnet-HTTPie

动手造轮子 —— dotnet-HTTPieIntroHTTPie 是一个基于 Python 的 HTTP CLI 工具&#xff0c;这也意味着想用 HTTPie 就需要安装 Python 环境&#xff0c;不想装 Python 环境&#xff0c;于是想用 C# 也写一个类似的东西&#xff0c;HTTPie 的语法很简单、简洁而且功能强大&…

减肥瘦不下来的原因找到了

全世界只有3.14 %的人关注了青少年数学之旅&#xff08;图源蜻蜓队长&#xff0c;侵权删&#xff09;

大数据、java、python、区块链、人工智能哪个发展前景更好?

在这个信息时代高速发展的情况下&#xff0c;很多人会对自己该往哪个方向发展感到迷茫&#xff0c;下面我就浅显的给大家介绍一下五大流行区域的发展前景。 大数据的发展前景&#xff1a; 当前大数据行业真的是人才稀缺吗? 学了几年后&#xff0c;大数据行业会不会产能过剩…

2020年CNCF和开源项目开发速度

作者&#xff1a;Chris Aniszczyk回到 2017 年&#xff0c;我们洞察[1]了当时速度&#xff08;velocity&#xff09;最高的 30 个开源项目&#xff0c;结果非常有趣。今年&#xff0c;我们想看看 CNCF 的项目速度&#xff0c;以及 2020 年速度最高的 30 个开源项目。此外&#…

automation服务不能创建对象

automation服务器不能创建对象 昨天开机打开Visual Studio.Net&#xff0c;准备新建一个项目&#xff0c;却发生一件奇怪的事情&#xff0c;系统报告“automation服务器不能创建对象”错误。然后在解决方案中只见项目名&#xff0c;而不见项目文件了。真是奇怪。再尝试打开已有…

又一中国机械狗来了:腾跃呼啦圈、原地起跳顶飞皮球,还能自主充电

全世界只有3.14 %的人关注了青少年数学之旅哇这是什么情况竟然腾空后跳过了呼啦圈这是刚刚升级的新机械狗说起机械狗其实浙江大学也搞了一只名叫“绝影”就是刚才咱们看到的那只绝影也迭代好几次了说白了就是一代一代的升级了上楼梯、跑步都是稳如狗退也退的潇洒这只机械狗确切…

Http协议Get方式获取图片

一、 二、 我试了试&#xff0c;Post方式也行啊&#xff0c;干嘛要叫强调Get方式&#xff0c;费解~~ 答曰&#xff1a;get是向服务器请求数据&#xff0c;post是提交数据。 三、 package com.hpu.test;import java.io.FileOutputStream; import java.io.IOException; import ja…

2018最新大数据职业划分和薪资介绍(大数据从事者须知)

相信接触大数据这个行业的人都知道大数据这个行业涉及很广泛&#xff0c;那么相应的也有很多职业诞生出 来&#xff0c;很多刚刚接触大数据的不知道该往哪方面发展&#xff0c;下面我就给大家介绍一下大数据行业的职业规划。 数据管理类 1&#xff0c;首席数据官 2&#xff…

dotnet 是 前30个增长最快速度的开源项目中排名第一的开发平台

CNCF 的博客 发了一篇文章 《Update on CNCF and Open Source Project Velocity 2020》&#xff0c;中文翻译参见 2020年CNCF和开源项目开发速度, 这个数据在2017年发布过一次&#xff0c;这次是3年来的再次更新的数据&#xff0c;往后每6个月就会更新一次数据-open source pro…

装了卡巴后VS 2003不能启动调试错误的解决方案

机器上同时安装vs2003和 vs2005 vs2005能调试&#xff0c;vs2003不能调试 &#xff0c;提示不在Debug Users权限组 经过一周时间的分析查找&#xff0c;知道问题原因 是ie浏览器的安全设置的问题&#xff0c;没有把当前用户信息带到IIS中。 一定是http://localhost,不能是local…

阿里、腾讯都在用的腰靠,拯救你20岁的身体60岁的腰!

▲ 点击查看在之前小木推荐“德国MINICUTE人体工学腰垫”受到了大家一致的好评和争相购买。小木为什么推荐这一款原因是&#xff1a;据统计&#xff0c;我国腰椎病患者已经突破2亿人。30~40岁人群中&#xff0c;患有颈腰椎病的占比59.1%&#xff01;而且有着越来越年轻化的趋…

Hadoop会遇到的45个问题,你确定你了解吗?

本文这里为大家分享Hadoop集群设置中经常出现的一些问题。 在工作生活中&#xff0c;有些问题非常简单&#xff0c;但往往搜索半天也找不到所需的答案&#xff0c;在Hadoop的学习与使用过程中同样如此。关注WX公众号&#xff1a;大数据技术工程师。可免费领取hadoop学习资料。这…