首页 > 代码库 > 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; }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。