Ce qui suit obtient des objets d'une feuille de calcul Excel qui est coulable pour string
ou castable à double
. Le problème est que même si je sais que l'objet est visiblement un entier, formaté comme "Général" à l'intérieur de la feuille de calcul, Excel.office.interop renvoie toujours un double
. Alors qu'il serait facile de convertir le double au plus proche int
, y a-t-il un moyen d'obtenir un objet coulable à un int
?
// returns null if the cell is empty
// returns an object castable to a string if it is a string
// returns an object castable to a double if it is a floating point or integer number
internal object GetCell(int row, int column)
{
if ((row != 0) && (column != 0) && (worksheet != null))
{
string cellName = ExcelCellReference(row, column);
Microsoft.Office.Interop.Excel.Range oneCellRange;
oneCellRange = worksheet.get_Range(cellName, cellName);
object oneObject;
// contrary to MSDN, the value Empty, checkable with method IsEmpty()
// does not work if the cell was empty.
// instead, what happens is that null is returned.
oneObject =
(object)
oneCellRange.get_Value(Microsoft.Office.Interop.Excel.XlRangeValueDataType.xlRangeValueDefault);
return oneObject;
}
else
{
if (worksheet == null)
throw new Exception("null worksheet reference");
else
throw new Exception("invalid argument");
}
}
EDIT: Si chaque nombre d'Excel est représenté comme un numéro de point flottant, même s'il est visiblement un entier, cela expliquerait ce comportement, auquel cas il n'y a pas d'autre solution que la conversion.
Edit: les gens continuent de publier des réponses de conversion. Cette question est censée solliciter idiomatique Interop
Réponses, pas les réponses de conversion.
Edit: la réponse de Chris dans un commentaire int i = (int)(double)GetCell(r, c)
est sans doute correct mais pas ce que j'avais en tête parce que la conversion se produit en dehors Interop
.