I am reading data from an Excel worksheet. Some of the data is percent values and these values get converted to decimals automatically -- ie 90% --> 0.90. I can't seem to find anyway to keep this from happening. Also, aren't all the data on the Excel sheet strings? So why would number formatting be happening at all?
Any advice is appreciated.
Regards.
Percentage is a formatting artifact in Excel. The actual number is always a decimal fraction (
0.9
in your case). Percentage is only a way to display your number on the worksheet.If you know that a column represents percentage, you should multiply it by
100
.Check the Excel worksheet - if the cells are formatted as
Percentage
then the data is only displayed as, eg:90.0%
, but is stored as0.9
.If you check the cell format before importing the number then you can handle any conversions required.
Assuming you are using Interop.Excel :
The
Range.NumberFormat
property returns the same format strings you would use in theFormat Cells
dialog box in Excel.Percentage
is just a shortcut to a format string of the type0.00%
where thedecimal places
selected in thePercentage
type simply alters the number of zeroes after the decimal point in the format string.MSDN - Range.NumberFormat
EDIT
Example of how to find the format of a range of cells :
Where
nfmt
will contain a format string which you can check for%
to determine whether the cell (or range) is formatted to display a fraction as a percentage. Note thatnfmt
will beNULL
if the range spans cells with different format strings!