读取和导出下载 excel 2003,2007 资料
protected void Page_Load(object sender, EventArgs e) { //直接在bin add referece search Microsoft.Office.Interop.Excel.dll (.net 4.5 version 好像是是 1.4.0.0.0) string filePath = Request.MapPath(@"~\excel\someData.xlsx"); //excel文件路径(server path) string sheetName = "Sheet1"; //文件中,哪一个sheet string connectionString07 = String.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties='Excel 12.0;HDR=YES'", filePath); //string connectionString03 = String.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=Excel 8.0", filePath); string query = String.Format("select * from [{0}$]", sheetName); OleDbConnection connection = new OleDbConnection(connectionString07); OleDbDataAdapter adapter = new OleDbDataAdapter(query, connectionString07); DataSet dataSet = new DataSet(); adapter.Fill(dataSet); DataTable table = dataSet.Tables[0]; }
注意 : 如果读取后要insert to SQL, 要注意格式和字的长度,把最长的放最上面,微软默认会依据前面8 rows来决定类型和长度等等。(如果遇到问题可以参考)
导出 excel 让游览器下载 (not ajax)
首先使用这个插件 http://epplus.codeplex.com/documentation (nuget可以下载)
更多功能介绍 : http://www.codeproject.com/Articles/680421/Create-Read-Edit-Advance-Excel-Report-in
refer : https://www.paragon-inc.com/resources/blogs-posts/easy_excel_interaction_pt1
然后 code :
using OfficeOpenXml;
public class Person { public string name { get; set; } public int age { get; set; } public bool isOK { get; set; } public DateTimeOffset dt { get; set; } public double dou { get; set; } } protected void Page_Load(object sender, EventArgs e) { try { List<Person> persons = new List<Person> { new Person { name = "keatkeat", age = 10,isOK = false,dt = DateTimeOffset.Now,dou = 50.66 }, new Person { name = "xinyao", age = 12,isOK = true,dt = DateTimeOffset.Now,dou = 50.00 } }; using (ExcelPackage pck = new ExcelPackage()) { //Create the worksheet ExcelWorksheet ws = pck.Workbook.Worksheets.Add("Demo"); ws.Cells["A1"].LoadFromCollection<Person>(persons, true); //load data from collection Response.Clear(); Response.AddHeader("content-disposition", "attachment; filename=file.xlsx"); //file name Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; Response.BinaryWrite(pck.GetAsByteArray()); Response.End(); } } catch (Exception ex) { throw; } }
建议是开一个独立的 web form page 来处理,前端可以简单的用 window popup 来做下载 ^^
一些常用的 Excel 操作 :
merge & center
var cells = ws.Cells[1, 1, 1, 5]; //FromRow, FromColumn, ToRow, ToColumn , 是从1开始的不是0哦 cells = ws.Cells["A1,A2"]; //"A1,A2" 我们叫 address cells.Merge = true; cells.Style.HorizontalAlignment = ExcelHorizontalAlignment.Center;
Read data from excel
System.IO.FileInfo file = new System.IO.FileInfo(Server.MapPath(@"~\test.xlsx")); using (ExcelPackage excel = new ExcelPackage(file)) { ExcelWorksheet worksheet = excel.Workbook.Worksheets.First(s => s.Name == "table1"); //table size //算法 : 假设你在 B2 写一个值,那么 row 是 2, column 是 2 var rowCount = worksheet.Dimension.End.Row; var columnCount = worksheet.Dimension.End.Column; //first row is columns var x = worksheet.Cells["A1,A2"]; //"A1,A2" 我们叫 address foreach (var firstRowCell in worksheet.Cells[1, 1, 1, columnCount]) { string value = firstRowCell.Text; } //second row is data for (var rowNumber = 2; rowNumber <= worksheet.Dimension.End.Row; rowNumber++) { var row = worksheet.Cells[rowNumber, 1, rowNumber, worksheet.Dimension.End.Column]; foreach (var cell in row) { bool isDate = cell.Value is DateTime; //check 类型 string format = cell.Style.Numberformat.Format; //check format string value = cell.Text; } } }
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 百万级群聊的设计实践
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程
· .NET 10 首个预览版发布,跨平台开发与性能全面提升
· 《HelloGitHub》第 107 期
· 从文本到图像:SSE 如何助力 AI 内容实时呈现?(Typescript篇)