使用C#从组合的Excel列/行读取数据

我正在尝试使用微软COM Interop从C#中的Excel文档读取数据。

到目前为止,我可以加载文档并从中读取一些数据。 但是,我需要从两个不同的列读取数据,并将其输出为json(用于jquery ajax调用)

我已经做了一个如何构buildExcel文档的快速原型,希望能够更容易地解释;-)

在这里输入图像描述

我所拥有的方法被称为GetExcelDataByCategory(string categoryName) ,其中categoryName参数将用于查找从哪个列获取数据。

所以,即如果我以“Category 2”作为参数进行调用,则需要获取C列行中的所有值以及 A列中的相应date,因此输出将如下所示:

在这里输入图像说明

然后需要将其转换/parsing为JSON。

我已经search了如何实现这一点,但迄今没有运气:-(我知道我可以使用get_Range()方法来select一个范围,但似乎你需要明确地告诉方法哪一行和哪一列获取数据。Ie:get_Range(“A1,C1”)

这是我第一次从Excel文档读取数据的经验,所以我想有很多东西需要学习;-)有没有办法让我的第二个图像输出?

任何帮助/提示,​​非常感谢! 🙂

提前致谢。

祝一切顺利,

这是我会做的:

 using Excel = Microsoft.Office.Interop.Excel; Excel.Application xlApp = new Excel.Application(); Excel.Workbook xlWorkbook = xlApp.Workbooks.Open("path to book"); Excel.Worksheet xlSheet = xlWorkbook.Sheets[1]; // get first sheet Excel.Range xlRange = xlSheet.UsedRange; // get the entire used range int numberOfRows = xlRange.Rows.Count; int numberOfCols = xlRange.Columns.Count; List<int> columnsToRead = new List<int>(); // find the columns that correspond with the string columnName which // would be passed into your method for(int i=1; i<=numberOfCols; i++) { if(xlRange.Cells[1,i].Value2 != null) // ADDED IN EDIT { if(xlRange.Cells[1,i].Value2.ToString().Equals(categoryName)) { columnsToRead.Add(i); } } } List<string> columnValue = new List<string>(); // loop over each column number and add results to the list foreach(int c in columnsToRead) { // start at 2 because the first row is 1 and the header row for(int r = 2; r <= numberOfRows; r++) { if(xlRange.Cells[r,c].Value2 != null) // ADDED IN EDIT { columnValue.Add(xlRange.Cells[r,c].Value2.ToString()); } } } 

这是我用来读取Excel的代码。 现在它读取标题的每一列(由第一行中的任何内容指定),然后读取所有行。 这不完全是你问(这不是格式化成JSON),但我认为这足以让你过了驼峰。


编辑:看起来像有几个空白单元格导致问题。 Interop中的空白单元格将为NULL,因此如果我们尝试调用Value2或Value2.ToString(),则会出现错误,因为它们不存在。 我添加了代码来检查以确保单元格在执行任何操作之前不是空的。 它防止了错误。

为Excelparsing和创build您可以使用ExcelDataReader: http : //exceldatareader.codeplex.com/

而对于json,你可以使用json.net:http://json.codeplex.com/

两者都相当容易使用。 只要看看网站。