C# Office Excel

读取Excel文件

// 读取Excel返回DataTable (简略版 不能读取合并格)
// 如果文件第一行是数据不是说明
// 请插入一行 内容随便填 不能为空
public DataTable GetTableFromExcell(string commandText)
        {
            // 连接字符串  (不明白的,请查找 App.config 配置数据库连接字符串)
    string connectionString = System.Configuration.ConfigurationSettings.AppSettings["connectionString"].ToString();       

            SqlConnection sqlConnection = new SqlConnection(connectionString);
            SqlCommand sqlCommand = new SqlCommand(commandText, sqlConnection);

            sqlConnection.Open();

            SqlDataAdapter dataAdapter = new SqlDataAdapter();
            DataTable table = new DataTable();

            dataAdapter.SelectCommand = sqlCommand;
            dataAdapter.Fill(table);

            sqlConnection.Close();

            return table;
        }

附上例图一张:

下面是DataTable导出为Excel

由于时间原因 就从网上找了一个 来自http://www.douban.com/note/240083972/

不过该方法需要安装Excel 本人安装2003不能用 只好装了2007

然后在项目中引用Microsoft.Office.Interop.Excel (版本12.0.0.0)

public void ExportToExcel(DataTable dt)
        {
            Microsoft.Office.Interop.Excel.Application appexcel = new Microsoft.Office.Interop.Excel.Application();

            SaveFileDialog savefiledialog = new SaveFileDialog();

            System.Reflection.Missing miss = System.Reflection.Missing.Value;

            appexcel = new Microsoft.Office.Interop.Excel.Application();

            Microsoft.Office.Interop.Excel.Workbook workbookdata;

            Microsoft.Office.Interop.Excel.Worksheet worksheetdata;

            Microsoft.Office.Interop.Excel.Range rangedata;

            //设置对象不可见

            appexcel.Visible = false;

            System.Globalization.CultureInfo currentci = System.Threading.Thread.CurrentThread.CurrentCulture;

            System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-us");

            workbookdata = appexcel.Workbooks.Add(miss);

            worksheetdata = (Microsoft.Office.Interop.Excel.Worksheet)workbookdata.Worksheets.Add(miss, miss, miss, miss);

            //给工作表赋名称

            worksheetdata.Name = "saved";

            for (int i = 0; i < dt.Columns.Count; i++)
            {

                worksheetdata.Cells[1, i + 1] = dt.Columns[i].ColumnName.ToString();

            }

            //因为第一行已经写了表头,所以所有数据都应该从a2开始

            rangedata = worksheetdata.get_Range("a2", miss);

            Microsoft.Office.Interop.Excel.Range xlrang = null;

            //irowcount为实际行数,最大行

            int irowcount = dt.Rows.Count;

            int iparstedrow = 0, icurrsize = 0;

            //ieachsize为每次写行的数值,可以自己设置

            int ieachsize = 1000;

            //icolumnaccount为实际列数,最大列数

            int icolumnaccount = dt.Columns.Count;

            //在内存中声明一个ieachsize×icolumnaccount的数组,ieachsize是每次最大存储的行数,icolumnaccount就是存储的实际列数

            object[,] objval = new object[ieachsize, icolumnaccount];

            icurrsize = ieachsize;

            while (iparstedrow < irowcount)
            {

                if ((irowcount - iparstedrow) < ieachsize)

                    icurrsize = irowcount - iparstedrow;

                //用for循环给数组赋值

                for (int i = 0; i < icurrsize; i++)
                {

                    for (int j = 0; j < icolumnaccount; j++)

                        objval[i, j] = dt.Rows[i + iparstedrow][j].ToString();

                    System.Windows.Forms.Application.DoEvents();

                }

                string X = "A" + ((int)(iparstedrow + 2)).ToString();

                string col = "";

                if (icolumnaccount <= 26)
                {

                    col = ((char)(‘A‘ + icolumnaccount - 1)).ToString() + ((int)(iparstedrow + icurrsize + 1)).ToString();

                }

                else
                {

                    col = ((char)(‘A‘ + (icolumnaccount / 26 - 1))).ToString() + ((char)(‘A‘ + (icolumnaccount % 26 - 1))).ToString() + ((int)(iparstedrow + icurrsize + 1)).ToString();

                }

                xlrang = worksheetdata.get_Range(X, col);

                // 调用range的value2属性,把内存中的值赋给excel

                xlrang.Value2 = objval;

                iparstedrow = iparstedrow + icurrsize;

            }

            //保存工作表

            System.Runtime.InteropServices.Marshal.ReleaseComObject(xlrang);

            xlrang = null;

            //调用方法关闭excel进程

            appexcel.Visible = true;

        }

C# Office Excel

时间: 2024-07-31 19:06:42

C# Office Excel的相关文章

Microsoft Office Excel 不能访问文件

Microsoft Office Excel 不能访问文件“QUOTE5.xls”. 可能的原因有: 1 文件名称或路径不存在.2 文件正被其他程序使用.3 您正要保存的工作簿与当前打开的工作簿同名. 说明: 执行当前 Web 请求期间,出现未处理的异常.请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息. 异常详细信息: System.Runtime.InteropServices.COMException: Microsoft Office Excel 不能访问文件“D:

金山WPS、微软Office EXCEL表格通用C++接口

金山WPS.微软Office EXCEL表格通用C++接口 之前有个小项目在win32框架下,有个导出报表的小需求excel,小小的整理了下几个接口.最近闲着了解了下VAB宏,扩展了几个实用接口,适用于金山wps办公软件,至于微软的excel版本是否能够忽略,这个还真没试过,理论上某些接口是可以的(只要VAB宏没变,这些信息是从一些专业的VAB群中得来,感谢群里的兄弟支持).源码往下拉,供学习交流之用.后边有时间再做word的. 描述: 对Excel常用操作封装类,适用于Microexcel.W

Microsoft Office Excel 不能访问文件及COM无法访问

Microsoft Office Excel 不能访问文件及COM无法访问 Microsoft Office Excel 不能访问文件“*.xls”. 可能的原因有: 1 文件名称或路径不存在. 2 文件正被其他程序使用. 3 您正要保存的工作簿与当前打开的工作簿同名. 莫名的错误,在本机调试一切正常,可是一旦部署到服务器,就无法访问了…… 查了些资料,看到大家都碰到这个问题 解决方案 即在C:\Windows\System32\config\systemprofile和C:\Windows\S

Macbook 修复Office Excel 异常问题

manbook 版本的office excel 在一次崩溃后,每次打开excel 文件都会弹出以下烦人的错误告警,并且每次都会重新打开很多过去保存过的excel 文件. "在应用程序意外退出之前,Excel 已保存了对文件的更改." 修复方法 用户直接在平时使用的mac 用户下,使用shell 执行以下命令 cd ~/Library/Group Containers/UBF8T346G9.Office rm -f MicrosoftRegistrationDB.reg 参考: http

[C++][Office] Excel 增益集自订另存新档及存成XPS、PDF问题

摘要:[C++][Office] Excel 增益集自订另存新档 在 Excel 增益集当中我们需要取得存档之后的文件名,所以在 WorkbookBeforeSave 事件当中进行尝试. 因为这个事件在存档前就已经触发了,无法取得使用者到底存成了什么文件名,所以我们取消掉 Office 自己调用的 SaveAs Dialog,让我们自行调用,这样就可以让使用者在我们自己产生的 Dialog 中存档,进行后续动作. 调用 SaveAsDialog 的方式有两种,各有优缺 如何自行调用 SaveAs

office excel 装Visual Studio后报错解决方案

安装完vs后,vs会向office安装COM加载项,但是在启动Excel时会发生弹出此加载项安装出错的消息,如下图. 名称: 从: file:///D:/Program Files (x86)/Microsoft Visual Studio 11.0/Common7/IDE/PrivateAssemblies/Microsoft.VisualStudio.QualityTools.LoadTestExcelAddIn.vsto ************** 异常文本 **************

.NET实现Office Excel自定义公式 广泛应用于报表与数据分析

在管理软件开发的功能点中,有相当一部分功能是与Excel做数据交互,产生Excel 数据报表.如果Excel报表的数据计算方法很有规律可循,则可以通过自定义公式来解决.比如常见的资产负债表,利润表,取数都非常有规律. Excel DNA是一套用.NET框架实现的Excel自定义公式引擎,互联网上有很多Excel财务方面的报表是基于此技术实现.Excel DNA完全开放源代码,可到网上下载它的完整源代码和例子工程,地址是https://exceldna.codeplex.com    开发自定义公

windows office excel的团队菜单消失后怎么添加

excel中的团队选项突然消息,重启电脑,重新安装windows office后都不行,百度也找不到解决方法. 经过一番折腾,终于可以了: 1.打开excle .文件 - 选项 - 自定义功能区,勾上开发者选项. 2.点击开发工具项-com 加载项,把team foundation add-in勾上.(刚开始勾的时候,下面显示已卸载,其实我是卸载又安装了,估计是windows的问题吧,没有刷新过来).然后团队菜单又出现啦.

配置Office Excel运行Python宏脚本

基本环境 名称 版本 操作系统 Windows 10 x64 Office 2016 安装Python 1.下载Python安装包 登录https://www.python.org/downloads/windows/进行下载 Python2.x或Python3.x均可,推荐Python3.x(因为2020年1月1日起Python2就停止服务了...) 2.安装Python 安装前,勾选Add Python 3.x to PATH选项.安装完毕之后,在Windows控制台可直接使用python命