首页 > 代码库 > C# Office Excel

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;        }