web-dev-qa-db-fra.com

Comment lire une seule valeur de cellule Excel

J'ai un fichier Excel avec sheet1 qui a une valeur que je dois lire à la ligne 2 et à la colonne 10. Voici mon code.

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];

Après avoir obtenu un objet de cellule qui est Excel.Range, je ne sais pas comment lire le contenu de cette cellule. J'ai essayé de le convertir en tableau et de le boucler, puis de convertir en tableau de chaînes, etc. Je suis sûr que c'est très simple. Existe-t-il un moyen direct d'obtenir une seule valeur de cellule sous forme de chaîne?

45
DoodleKana

Vous devez le convertir en chaîne (et non en tableau) car il s'agit d'une valeur unique.

var cellValue = (string)(excelWorksheet.Cells[10, 2] as Excel.Range).Value;
71
System Down
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();

Cet exemple utilise la bibliothèque d'objets "Microsoft Excel 15.0" mais peut être compatible avec les versions antérieures d'Interop et d'autres bibliothèques.

14
David Sopko
 //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;
7
MadPointer

Il vaut mieux utiliser .Value2 () au lieu de .Value (). Ceci est plus rapide et donne la valeur exacte dans la cellule. Pour certains types de données, une troncature peut être observée lorsque .Value () est utilisé.

4
Shilpa

S'il vous plaît essayez ceci. Peut-être que cela pourrait vous aider. Ça marche pour moi.

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
2
Udaayipp

Le problème avec la lecture d'une cellule Excel unique dans .Net provient du fait que la cellule vide est évaluée en tant que Null. Ainsi, on ne peut pas utiliser ses propriétés .Value ou .Value2, car une erreur apparaît.

Pour retourner une chaîne vide, lorsque la cellule est Null, la Convert.ToString(Cell) peut être utilisée de la manière suivante:

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);
}
1
Vityata