标签:blank 管理系 int end title 安装完成 var 个数 noi
这段时间在做一个数据管理系统,需要读取excel表格,组装json,最终存入mongodb,这里记录一下解决思路。
需要做的准备工作:
下载地址:https://products.office.com/zh-cn/compare-all-microsoft-office-products?tab=1
有32bit和64bit两个版本,具体要安装哪个要看你的Office程序是32bit的还是64bit的。通常来讲,一般是选择与office程序相对应的版本。但是如果你的项目必须在64位下运行,又不想大费周章删了原有的office程序再重装,这时候该咋办呢?在网上找了很久,终于找到了办法:
(1)下载AccessDatabaseEngine_x64.exe,放到某一个目录下,比如:C:\AccessDatabaseEngine_x64.exe,点击该程序安装,这个时候会提示你不能安装,原因是你的office程序是32位的。可选择其它安装方式,进入命令窗口,执行
(2)等待安装完成,查看注册表HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\14.0\Common\FilesPaths,删除mso.dll(此步骤一定要做,查看注册表:开始-运行-regedit-回车)
2.引用Newtonsoft.Json.dll
下载地址:https://www.newtonsoft.com/json
下载完成后,找到对应版本的dll,项目中直接引用即可。
还有另外一种下载方式,使用Nuget,具体如下:
打开vs工具 - NuGet程序包管理器 - 程序包管理器控制台,这时在VS的底部窗口出现命令行:pm>install-package newtonsoft.json 执行完,会提示下载在哪个位置,再从项目中引用即可。
准备工作做好后,就可以开始写代码了。
总共三个方法:根据Excel文件获取所有Sheet名称,获取每一个Sheet的内容组装dataTable,table转Excel
(1)根据Excel文件获取所有Sheet名称
1 public List<string> GetExcelSheetNames(string filePath) 2 { 3 OleDbConnection connection = null; 4 System.Data.DataTable dt = null; 5 try 6 { 7 String connectionString = String.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=‘Excel 12.0;HDR=YES;IMEX=2;‘", filePath); 8 connection = new OleDbConnection(connectionString); 9 connection.Open(); 10 dt = connection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null); 11 12 if (dt == null) 13 { 14 return new List<string>(); 15 } 16 17 String[] excelSheets = new String[dt.Rows.Count]; 18 int i = 0; 19 foreach (DataRow row in dt.Rows) 20 { 21 excelSheets[i] = row["TABLE_NAME"].ToString().Split(‘$‘)[0]; 22 i++; 23 } 24 return excelSheets.Distinct().ToList(); 25 } 26 catch (Exception ex) 27 { 28 return new List<string>(); 29 } 30 finally 31 { 32 if (connection != null) 33 { 34 connection.Close(); 35 connection.Dispose(); 36 } 37 if (dt != null) 38 { 39 dt.Dispose(); 40 } 41 } 42 }
(2)获取每一个Sheet的内容组装dataTable
1 public DataTable GetExcelContent(String filePath, string sheetName) 2 { 3 if (sheetName == "_xlnm#_FilterDatabase") 4 return null; 5 DataSet dateSet = new DataSet(); 6 String connectionString = String.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=‘Excel 12.0;HDR=NO;IMEX=2;‘", filePath); 7 String commandString = string.Format("SELECT * FROM [{0}$]", sheetName); 8 using (OleDbConnection connection = new OleDbConnection(connectionString)) 9 { 10 connection.Open(); 11 using (OleDbCommand command = new OleDbCommand(commandString, connection)) 12 { 13 OleDbCommand objCmd = new OleDbCommand(commandString, connection); 14 OleDbDataAdapter myData = new OleDbDataAdapter(commandString, connection); 15 myData.Fill(dateSet, sheetName); 16 DataTable table = dateSet.Tables[sheetName]; 17 for (int i = 0; i < table.Rows[0].ItemArray.Length; i++) 18 { 19 var cloumnName = table.Rows[0].ItemArray[i].ToString(); 20 if (!string.IsNullOrEmpty(cloumnName)) 21 table.Columns[i].ColumnName = cloumnName; 22 } 23 table.Rows.RemoveAt(0); 24 return table; 25 } 26 } 27 }
(3)table转Excel
1 public string ExcelToJson(string filePath) 2 { 3 List<string> tableNames = GetExcelSheetNames(filePath); 4 var json = new JObject(); 5 tableNames.ForEach(tableName => 6 { 7 var table = new JArray() as dynamic; 8 DataTable dataTable = GetExcelContent(filePath, tableName); 9 foreach (DataRow dataRow in dataTable.Rows) 10 { 11 dynamic row = new JObject(); 12 foreach (DataColumn column in dataTable.Columns) 13 { 14 row.Add(column.ColumnName, dataRow[column.ColumnName].ToString()); 15 } 16 table.Add(row); 17 } 18 json.Add(tableName, table); 19 }); 20 return json.ToString(); 21 }
最终生成的是json对象,key是sheet名,value是json数组,为每一张sheet的内容。
标签:blank 管理系 int end title 安装完成 var 个数 noi
原文地址:http://www.cnblogs.com/zouxiaojia/p/7512841.html