60

我有一个带有 sheet1 的 excel 文件,它的值需要在第 2 行和第 10 列读取。这是我的代码。

Excel.Workbook excelWorkbook = excelApp.Workbooks.Open(workbookPath, 0, false, 5, "", "", false, Excel.XlPlatform.xlWindows, "", true, false, 0, true, false, false);
Excel.Sheets excelSheets = excelWorkbook.Worksheets;
string currentSheet = "Sheet1";
Excel.Worksheet excelWorksheet = (Excel.Worksheet)excelSheets.get_Item(currentSheet);
var cell = (Excel.Range)excelWorksheet.Cells[10, 2];

获得 Excel.Range 单元格对象后,我不知道如何读取该单元格的内容。我尝试将其转换为数组并对其进行循环,然后尝试转换为字符串数组等。我相信它非常简单。有没有一种直接的方法来获取一个字符串的单元格值?

4

9 回答 9

89

您需要将其转换为字符串(而不是字符串数组),因为它是单个值。

var cellValue = (string)(excelWorksheet.Cells[10, 2] as Excel.Range).Value;
于 2013-09-24T23:27:18.770 回答
20
using Microsoft.Office.Interop.Excel;

string path = "C:\\Projects\\ExcelSingleValue\\Test.xlsx ";

Application excel = new Application();
Workbook wb = excel.Workbooks.Open(path);
Worksheet excelSheet = wb.ActiveSheet;

//Read the first cell
string test = excelSheet.Cells[1, 1].Value.ToString();

wb.Close();

此示例使用“Microsoft Excel 15.0 对象库”,但可能与早期版本的 Interop 和其他库兼容。

于 2014-10-04T17:32:57.597 回答
8
 //THIS IS WORKING CODE                        
 Microsoft.Office.Interop.Excel.Range Range_Number,r2;
 Range_Number = wsheet.UsedRange.Find("smth");
 string f_number="";

 r2 = wsheet.Cells;

 int n_c = Range_Number.Column;
 int n_r = Range_Number.Row;
 var number = ((Range)r2[n_r + 1, n_c]).Value;

 f_number = (string)number;
于 2014-03-28T16:18:42.213 回答
5

最好使用 .Value2() 而不是 .Value()。这更快,并且在单元格中给出了准确的值。对于某些类型的数据,使用 .Value() 时可以观察到截断。

于 2015-11-18T05:37:55.750 回答
3

请试试这个。也许这可以帮助你。这个对我有用。

string sValue = (range.Cells[_row, _column] as Microsoft.Office.Interop.Excel.Range).Value2.ToString();
//_row,_column your column & row number 
//eg: string sValue = (sheet.Cells[i + 9, 12] as Microsoft.Office.Interop.Excel.Range).Value2.ToString();
//sValue has your value
于 2015-11-17T10:45:17.523 回答
3

读取单个 Excel 单元格的问题.Net来自这样一个事实,即空单元格被评估为Null. 因此,不能使用它的.Valueor.Value2属性,因为出现了错误。

要返回一个空字符串,当单元格是时NullConvert.ToString(Cell)可以通过以下方式使用:

Excel.Workbook wkb = Open(excel, filePath);
Excel.Worksheet wk = (Excel.Worksheet)excel.Worksheets.get_Item(1);

for (int i = 1; i < 5; i++)
{
    string a = Convert.ToString(wk.Cells[i, 1].Value2);
    Console.WriteLine(a);
}
于 2018-05-02T08:34:45.477 回答
1

您有两种获取价值的方法

using xl = Microsoft.Office.Interop.Excel;

// 1. Using Cells with numbered reference
string cellValue = (excelWorksheet.Cells[10, 2] as xl.Range).Text.ToString();

// 2. Using Range with address reference
string cellValue = excelWorksheet.Range["J2"].Text.ToString();
于 2022-01-14T09:30:26.687 回答
0

从 excel 读取单元格值时可能会遇到问题Worksheet。如果单元格为空.Value(或.Value2)将抛出null. 如果要消除该问题,则需要检查结果是否为null. 像这样的东西:

string strcelltext = Convert.ToString(mySheet.get_Range("A1", "A1").Value2) ?? "";
于 2021-06-02T20:13:35.477 回答
0

这是一个在您引用 objWorksheet.UsedRange 的情况下可能会更好的解决方案。

Excel.Worksheet mySheet = ...(load a workbook, etc);
Excel.Range myRange = mySheet.UsedRange;
var values = (myRange.Value as Object[,]);
int rowNumber = 3, columnNumber = 5;
string cellValue = Convert.ToString(values[rowNumber, columnNumber]);
于 2020-04-27T17:02:11.710 回答