2010-03-14 5 views
1

J'ai un peu de code ASP.NET qui exporte des données dans une grille de données dans Excel, mais j'ai remarqué qu'il perturbe un champ particulier lors de l'exportation.Excel transformer mes nombres en flottants

E.g. J'ai la valeur de quelque chose comme 89234010000725515875 dans une colonne dans le DataGrid mais quand il est exporté, il le transforme en 89234 + 19.

Existe-t-il un formatage Excel qui ramènera mon numéro d'origine? Merci.

Répondre

2

Excel ne gâche pas vraiment le terrain. Deux choses se produisent:

  1. Excel met en forme de grands nombres en notation scientifique. Donc "89234010000725515875" devient "8.9234E + 19" ou "8.9234 x 10^19".
  2. La taille du nombre "89234010000725515875" dépasse la précision utilisée par Excel pour stocker les valeurs. Excel stocke votre numéro comme "89234010000725500000" de sorte que vous perdez les cinq derniers chiffres.

En fonction de vos besoins, vous pouvez faire l'une des deux choses suivantes. Votre première option est de changer le formatage de "Général" à "0" (Nombre avec zéro décimales.) Cela vous donnera "89234010000725500000" de sorte que vous aurez perdu la précision, mais vous serez en mesure d'effectuer des calculs sur le nombre.

La deuxième option consiste à formater la cellule sous la forme "@" ou à coller votre champ avec une apostrophe au début de la ligne pour forcer la valeur à être du texte. Vous obtiendrez tous les chiffres, mais vous ne serez pas en mesure de faire des calculs de la valeur.

J'espère que cela aide.

0

Ci-dessous le code source C# pour le faire avec . Puisque l'API SpreadsheetGear est similaire à l'API d'Excel, vous devriez pouvoir facilement adapter ce code à l'API d'Excel pour obtenir le même résultat.

Vous pouvez télécharger un essai gratuit here si vous voulez l'essayer vous-même.

Disclaimer: Je possède 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); 
     } 
    } 
} 
1

Vous pouvez ajouter un espace dans le champ, puis lors de l'exportation vers Excel, il est considéré comme une chaîne:

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

Bonne chance.

Questions connexes