То, что вы видите, имеет смысл, так как Excel будет хранить значение как double
, как любое другое числовое значение.
Похоже, вы экспортируете из базы данных в Excel.Я бы предположил, что при экспорте форматирование не установлено в Excel, и в этом случае, используя значение .Text
объекта ячейки, просто вернитесь к «General» в Excel.
Скажем, у вас есть это:
![enter image description here](https://i.stack.imgur.com/fUGu9.png)
Итак, в итоге вы получите следующее:
[TestMethod]
public void Cell_Digits_As_String()
{
///12787989/chtenie-dlinnoi-posledovatelnosti-tsifr-v-vide-stroki
var fi = new FileInfo(@"c:\temp\Cell_Digits_As_String.xlsx");
using (var package = new ExcelPackage(fi))
{
var workbook = package.Workbook;
var worksheet = workbook.Worksheets.First();
var valCell = worksheet.Cells[1, 1];
var valText = valCell.Text; //Applies "General" unless otherwise specified
var valValue = valCell.Value; //As a BOXED double
var valString = valCell.GetValue<string>(); //Falls back to ChangeType
Console.WriteLine($"Value as text: {valText} ({valText.GetType()})");
Console.WriteLine($" Same as: {((double)valValue).ToString("0.#####", new CultureInfo("es-US"))}");
Console.WriteLine($"Value as value: {valValue} ({valValue.GetType()})");
Console.WriteLine($" Same as: {valValue.ToString()}");
Console.WriteLine($"Value as string: {valString} ({valString.GetType()})");
Console.WriteLine($" Same as: {Convert.ChangeType(valValue, typeof(double)).ToString()}");
}
}
Что показывает это на выходе:
Value as text: 1790002099190700 (System.String)
Same as: 1790002099190700
Value as value: 1.7900020991907E+15 (System.Double)
Same as: 1.7900020991907E+15
Value as string: 1.7900020991907E+15 (System.String)
Same as: 1.7900020991907E+15
Итак, кажется, что использование .Text
наиболее удобно для получения того, что вы хотите.Но если вы обеспокоены тем, что форматирование может быть каким-либо образом изменено, или просто хотите быть абсолютно уверенным, просто сделайте:
try
{
((double)valCell.Value).ToString("0.#");
}
catch (Exception ex)
{
//Handle it...
}