Excel превращает мои числа в поплавки - PullRequest
1 голос
/ 15 марта 2010

У меня есть немного кода ASP.NET, который экспортирует данные из таблицы данных в Excel, но я заметил, что при экспорте это портит определенное поле.

например. У меня есть значение что-то вроде 89234010000725515875 в столбце в сетке данных, но при экспорте оно превращается в 89234 + 19.

Есть ли форматирование Excel, которое вернет мой исходный номер? Спасибо.

Ответы [ 3 ]

2 голосов
/ 15 марта 2010

Excel на самом деле не портит поле. Происходят две вещи:

  1. Excel форматирует большие числа в научной записи. Таким образом, «89234010000725515875» становится «8,9234E + 19» или «8,9234 x 10 ^ 19».
  2. Размер числа «89234010000725515875» превышает точность, с которой Excel сохраняет значения. Excel сохраняет ваш номер как "89234010000725500000", поэтому вы теряете последние пять цифр.

В зависимости от ваших потребностей вы можете сделать одну из двух вещей.

Первый вариант - изменить форматирование с «Общее» на «0» (число с нулем после запятой). Это даст вам «89234010000725500000», так что вы потеряете точность, но сможете выполнять вычисления на число.

Второй вариант - отформатировать ячейку как текст "@" или вставить в поле апостроф в начале строки, чтобы значение стало текстом. Вы получите все цифры, но не сможете рассчитать значение.

Надеюсь, это поможет.

1 голос
/ 17 апреля 2012

Вы можете добавить пробел к полю, затем при экспорте в Excel он считается строкой:

lblTest.Text = DTInfo.Rows(0).Item("Test") & " "

Удачи.

0 голосов
/ 15 марта 2010

Ниже приведен исходный код C # для этого с SpreadsheetGear for .NET . Поскольку SpreadsheetGear API похож на API Excel, вы должны легко адаптировать этот код к API Excel, чтобы получить тот же результат.

Вы можете скачать бесплатную пробную версию здесь , если хотите попробовать сами.

Отказ от ответственности: я владею SpreadsheetGear LLC

using System;
using SpreadsheetGear;

namespace Program
{
    class Program
    {
        static void Main(string[] args)
        {
            // Create a new workbook and get a reference to A1.
            IWorkbook workbook = Factory.GetWorkbook();
            IWorksheet worksheet = workbook.Worksheets[0];
            IRange a1 = worksheet.Cells["A1"];
            // Format A1 as Text using the "@" format so that the text
            // will not be converted to a number, and put the text in A1.
            a1.NumberFormat = "@";
            a1.Value = "89234010000725515875";
            // Show that the formatted value is 
            Console.WriteLine("FormattedValue={0}, Raw Value={1}", a1.Text, a1.Value);
            // Save the workbook.
            workbook.SaveAs(@"c:\tmp\Text.xls", FileFormat.Excel8);
            workbook.SaveAs(@"c:\tmp\Text.xlsx", FileFormat.OpenXMLWorkbook);
        }
    }
}
...