博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#读取excel文件,生成json
阅读量:4881 次
发布时间:2019-06-11

本文共 4916 字,大约阅读时间需要 16 分钟。

这段时间在做一个数据管理系统,需要读取excel表格,组装json,最终存入mongodb,这里记录一下解决思路。

需要做的准备工作:

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.引用.dll

下载地址:

下载完成后,找到对应版本的dll,项目中直接引用即可。

还有另外一种下载方式,使用Nuget,具体如下:

打开vs工具 - NuGet程序包管理器 - 程序包管理器控制台,这时在VS的底部窗口出现命令行:pm>install-package newtonsoft.json 执行完,会提示下载在哪个位置,再从项目中引用即可。

 

准备工作做好后,就可以开始写代码了。

总共三个方法:根据Excel文件获取所有Sheet名称,获取每一个Sheet的内容组装dataTable,table转Excel

 (1)根据Excel文件获取所有Sheet名称

1 public List
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
();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
();29 }30 finally31 {32 if (connection != null)33 {34 connection.Close();35 connection.Dispose();36 }37 if (dt != null)38 {39 dt.Dispose();40 }41 }42 }
View Code

(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         }
View Code

(3)table转Excel

1  public string ExcelToJson(string filePath) 2         { 3             List
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 }
View Code

最终生成的是json对象,key是sheet名,value是json数组,为每一张sheet的内容。

 

转载于:https://www.cnblogs.com/zouxiaojia/p/7512841.html

你可能感兴趣的文章
java项目@override报错问题
查看>>
DataTable 和Json 字符串互转
查看>>
Django中Template does not exit
查看>>
Redis安装 java中的连接 序列化 反序列化
查看>>
hdu 1896 优先队列的应用
查看>>
递推和迭代的比较
查看>>
OpenGL 头文件,库文件
查看>>
点与不规则图形关系判断
查看>>
linux不开启图形界面
查看>>
菜鸟学习SSH(二)——Struts国际化
查看>>
iOS 自定义控件--重写一些方法
查看>>
第二次冲刺作业
查看>>
【转】HTML, CSS和Javascript调试入门
查看>>
折线图-小案例
查看>>
STL:优先队列Priority Aueue
查看>>
蓝桥历年试题 套娃
查看>>
EF4.0和EF5.0增删改查的写法区别及执行Sql的方法
查看>>
作业一
查看>>
微信支付体验
查看>>
Excel导数据到数据库
查看>>