C#读取excel文件
最近在项目中应用到读取excel文件的功能,在此总结一下开发经验。
读取数据分为两种情况,一种是csv格式的文件,另一种是xlsx格式的文件。
首先需要注意的是:csv文件是以英文逗号间隔的文本文件,而xlsx是电子表格,包含文本、数值、公式和格式。
代码示例:
读取csv文件
public class StudentEntity { public String name; public String no; public String fileName; } public String ReadCsvFileToEntityList(string filePath, String fileName, List<StudentEntity> stuList) { LoadUtil util = new LoadUtil(); String result = "S"; int i = 0; try { String fileAllName = filePath + @"\" + fileName; using (StreamReader sr = new StreamReader(fileAllName, Encoding.Default)) { String line; // 构造解析器 SeperatorBasedParser parser = new SeperatorBasedParser(seperator: SeperatorType.COMMA); // 按行拆解数据文件 while (!String.IsNullOrEmpty(line = sr.ReadLine())) { //去掉文件头 if (line.Contains("学号")) { continue; } var entity = parser.ParseStringToEntity<StudentEntity>(line); String[] lineList = line.Split(',');//根据英文逗号分隔 entity.fileName = fileName;//文件名 entity.no = lineList[0];//学号 entity.name = lineList[1];//姓名 stuList.Add(entity); i++; } Console.WriteLine("Total lines: " + i.ToString()); FileLogger.log("LoadManager.ParseFileToEntityList Succeed! " + fileAllName); } } catch (Exception e) { // Let the user know what went wrong. Console.WriteLine("The file " + fileName + " could not be read: " + ", error line: " + i.ToString()); Console.WriteLine(e.Message); FileLogger.log(e); return null; } return result; }
读取xlsx文件:
const string connectStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties='Excel 8.0;HDR=Yes;IMEX=1;'"; public string ReadXlsxFileToEntityList(string filePath, String fileName, List<StudentEntity> stuList) { String fileAllName = filePath + "\\" + fileName; string result = "S"; FileInfo fileInfo = new FileInfo(fileAllName); try { DataTable sheetTable = GetSheetTable(fileAllName); //只需要取第一个Sheet的sheetName string sheetName = sheetTable.Rows[0][2].ToString(); //读取Excel内容,将excel中的内容存在list中 DataTable dataTable = GetDataTable(fileAllName, sheetName); result = GetFocList(dataTable, fileName, stuList); } catch (Exception e) { return "E_" + e.Message; } return result; } /// <summary> /// 根据文件名称和sheet读取文件内容 /// </summary> /// <param name="fileName"></param> /// <param name="sheetName"></param> /// <returns></returns> public DataTable GetDataTable(string fileName, string sheetName) { DataTable dataTable = new DataTable(); OleDbConnection dbConn = new OleDbConnection(string.Format(connectStr, fileName)); try { dbConn.Open(); OleDbCommand dbCmd = new OleDbCommand(); dbCmd.Connection = dbConn; dbCmd.CommandText = "select * from [" + sheetName + "] "; dbCmd.CommandType = CommandType.Text; OleDbDataAdapter dbApt = new OleDbDataAdapter(dbCmd); dbApt.Fill(dataTable); } finally { dbConn.Close(); } return dataTable; } /// <summary> /// 根据文件名称获取文件中所有的sheetname /// </summary> /// <param name="filePath"></param> /// <returns></returns> public DataTable GetSheetTable(string filePath) { OleDbCommand dbCmd = new OleDbCommand(); OleDbConnection dbConn = new OleDbConnection(string.Format(connectStr, filePath)); DataTable sheetTable = null; try { dbConn.Open(); //dbTable装载了所有的sheetneame sheetTable = dbConn.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" }); dbConn.Close(); } catch (Exception e) { throw new Exception(e.Message); } finally { dbConn.Close(); } return sheetTable; } /// <summary> /// 将dataTable转换为entityList /// </summary> /// <param name="dataTable"></param> /// <param name="fileName"></param> /// <returns></returns> public String GetFocList(DataTable dataTable, String fileName, List<StudentEntity> stuList) { var result = "S"; if (dataTable.Rows.Count > 0) { for (int i = 0; i < dataTable.Rows.Count; i++) { try { //不读取文件头 if (dataTable.Rows[i][0].ToString().Trim().Contains("学号")) { continue; } StudentEntity entity = new StudentEntity(); entity.fileName = fileName;//文件名 entity.no = dataTable.Rows[i][0].ToString().Trim();//学号 entity.name = dataTable.Rows[i][1].ToString().Trim();//姓名 stuList.Add(entity); } catch (Exception e) { throw new Exception(e.Message + " " + i + " " + dataTable.Rows[i]); } } } return result; }
相关推荐
C# 读取EXCEL文件的三种经典方法.方法一:采用OleDB读取EXCEL文件:方法二:引用的com组件:Microsoft.Office.Interop.Excel.dll 读取EXCEL文件 方法三:将EXCEL文件转化成CSV(逗号分隔)的文件,用文件流读取...
用c#做的读取excel文件,用dataset实现的,datatable
读取F盘123.xls文件 然后显示在listview中
//C# 读取Excel文件、C#读取xls文件、C#读取xlsx文件、C#读取csv文件 //C# 将xls文件转换为DataTable、C#将xlsx文件转换为DataTable //C#将csv文件转换为DataTable //C#将txt文件转换为DataTable(列与列之间空格隔...
用ADO连接的方式高效快速读取EXCEL数据。
解决c#和excell的接口问题,很简单的操作!
C#读取Excel文件内容发送邮件GroupUpEmails
可以方便的使用c#读取excel文件,为初学者提供很好的学习平台。还有不懂可以下面共同学习。
C# 导入Excel文件到ListView和导出ListView到Excel文件
使用vs2010开发,读取Excel文件(包含.xls,.xlsx),如果工程提示未在本地计算机上注册,请自行百度解决方案并安装缺失组件
可以选择要打开的Excel文件 支持offic2003及offic2007 同时会自动获取第一个表名 若想获取所有表名 只要加一个循环即可
C# 读取加密的Excel 文件... 开始研究NPOI读取加密的Excel文件,没有研究出来,后来才改用Microsoft.Office.Interop.Excel读取加密的Excle文件。若有那位大牛研究出NPOI读取加密的Excel文件,希望能共享出源码来。 谢谢
C#邮件发送功能实现,以163邮箱服务器为例,读取Excel文件内容的收信人发送邮件。
详细介绍了几种C#读取EXCEL文档的方法,供初学者学习
private string strConnect = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\工作表.xls;Extended Properties='Excel 8.0;HDR=NO;IMEX=1'";
用C#读写Excel文件,详细介绍了#读写Excel文件的各种操作的代码;
C# 生成和读取EXCEL文件,本人实际测试能用,欢迎各位下载使用
多多支持,偶才有积分,才会去制作.该视频讲述了如何使用C#制作Excel文件的读取
C#读取excel文件,学习! C#读取Excel源代码