zoukankan      html  css  js  c++  java
  • 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;
    
            }
  • 相关阅读:
    【math】共线性的影响分析
    【colab】挂载google网盘
    【ML】非均衡样本处理
    phpwind < v6 版本命令执行漏洞
    Uc爆破工具
    shodan:黑客搜索引擎
    webshell下执行命令脚本汇集
    Android利用Fiddler进行网络数据抓包
    150个在线代理站点
    PHP filesystem attack vectors
  • 原文地址:https://www.cnblogs.com/iwenr/p/3785336.html
Copyright © 2011-2022 走看看