C # получить данные Excel в экспоненциальном формате - PullRequest
0 голосов
/ 23 сентября 2011

Excel контролировал форматирование, как описано в здесь

В моем примере данных (буквенно-цифровой) в Excel: -

P000213590-A
312700133751--> отображать как 3.127E + 11

В моем примере кода: -

DataTable dt = new DataTable("PartUpload");

DataColumn column;

column = new DataColumn();
column.DataType = System.Type.GetType("System.String");
column.AllowDBNull = true;
column.ColumnName = "Part Original";
dt.Columns.Add(column);

column = new DataColumn();
column.DataType = System.Type.GetType("System.String");
column.AllowDBNull = true;
column.ColumnName = "Part_ToString";
dt.Columns.Add(column);

column = new DataColumn();
column.DataType = System.Type.GetType("System.String");
column.AllowDBNull = true;
column.ColumnName = "Part_TryParse";
dt.Columns.Add(column);

string connStr = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Documents and Settings\seahc1\Desktop\test1.xls;Extended Properties=ImportMixedTypes=Text;Excel 8.0;HDR=Yes;IMEX=1";

OleDbConnection objConn = new OleDbConnection(connStr);
objConn.Open();

OleDbDataAdapter adap = new OleDbDataAdapter(@"SELECT Part as [Part Original]FROM [Sheet1$]", connStr);

adap.Fill(dt);

foreach (DataRow row in dt.Rows)
{
    row["Part_ToString"] = row["Part Original"].ToString();

    double doubleConverResult;
    bool result = double.TryParse(row["Part Original"].ToString(), NumberStyles.Any, CultureInfo.InvariantCulture, out doubleConverResult);
    if (result)
    {
        row["Part_TryParse"] = doubleConverResult.ToString();
    }
}

Part_ToString = с экспоненциальной = "3.1270013375e + 011"
Part_TryParse = округлить до ближайшего = 312700133750

Я отладил и обнаружил, что adap.Fill(dt) заполняет данные данными в экспоненциальной форме.

Как я могу получить точное значение с помощью программ на C #, потому что я не хочу, чтобы конечный пользователь форматировал свою таблицу Excel.

Пожалуйста, совет. Спасибо.

1 Ответ

0 голосов
/ 23 сентября 2011

Я понимаю, что означает Crystal.

Создайте документ Excel и поместите номер 312700133751 в ячейку.Формат ячейки должен быть «Общий».

В Excel будет отображаться 3.127E + 11 вместо 312700133751.

Проблема заключается в том, что при чтении файла с драйвером OleDbConnectionDataTable будет заполнен строковым значением «3.1270013505e + 011» (даже если Excel имеет формат «Общее»).

Проблема в том, что 3.1270013505e + 011 равен 312700133750, а не 312700133751 (обратите внимание на последнюю цифру, это ноль вместо одного).Это проблема!То, что OleDbConnection "усекает" десятичные дроби числа до 10 цифр, что оставляет одну дополнительную цифру вне преобразования.

Я также не нашел решения ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...