powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Криво вставляет в EXCEL из DataTable
14 сообщений из 14, страница 1 из 1
Криво вставляет в EXCEL из DataTable
    #39586259
saley
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте,
Подскажите пожалуйста, сталкивался ли кто с проблемой форматов чисел при вставке в Эксель.
Пробелама вот в чём:
Пытаюсь вставить данные из DataTable.
Вроде ничего сложного нет.
Сначала привожу данные к типу object, потом вставляю данные с помощью функции

m_objRange.set_Value(m_objOpt, objData);

самое интересное что число 987,50637379 превращается в 9 875 063 737 900,000
Думал что накосячил где то с форматами, вроде нормально. Смотрел везде.
Потом пробовал задавать формат при приведении к object - не помогло
Пробовал задавать формат в самом Экселе перед вставкой - не помогло
Но странным образом помогло следующее извращение:
Перед вставкой к каждой цифре прибавляю какую-нибудь приставку например "ssss-"
после вставки в эксель полной заменой убираю "ssss-" и все числа нормально выглядят.
Но это извращение отнимает время, если таблица большая, то становиться очень чувствительно.
Помогите пожалуйста разобраться.
...
Рейтинг: 0 / 0
Криво вставляет в EXCEL из DataTable
    #39586391
BlackEric
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Смотрите деятичный разделитель и прочие региональные настройки.

Просто из буфера вставляется нормально?
...
Рейтинг: 0 / 0
Криво вставляет в EXCEL из DataTable
    #39586561
saley
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlackEricСмотрите деятичный разделитель и прочие региональные настройки.

Просто из буфера вставляется нормально?
нормально.
В экселе стоит галка использовать системный разделитель.
Системный разделитель целой и дробной части - запятая
Системный разделитель групп разрядов - пробел
Смотрю что отображается значением в datatable рисует запятая.
Или где то ещё есть засада? Т.е надо руками что-то прописывать?
...
Рейтинг: 0 / 0
Криво вставляет в EXCEL из DataTable
    #39586607
bobsoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
saley,
Если региональные настройки наши то в них должен быть разделитель дробной части - точка , по моему так .
...
Рейтинг: 0 / 0
Криво вставляет в EXCEL из DataTable
    #39586620
Pu4koff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Excel не всегда и не везде использует текущие настройки. Один метод "русского" excel поймёт формулу СУММ, а другому подавай только всякие sum, if,...
Непонятно в итоге число записывается как упакованный float/double/... или же как строка в системной локали?
Формат ячейки правильно Excel'ем проставляется или там что-то специфическое и если выставить числовым, то будет правильное число?
...
Рейтинг: 0 / 0
Криво вставляет в EXCEL из DataTable
    #39586806
saley
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pu4koffExcel не всегда и не везде использует текущие настройки. Один метод "русского" excel поймёт формулу СУММ, а другому подавай только всякие sum, if,...
Непонятно в итоге число записывается как упакованный float/double/... или же как строка в системной локали?
Формат ячейки правильно Excel'ем проставляется или там что-то специфическое и если выставить числовым, то будет правильное число?

формат ячейки выдаёт правильный "# ##0,000", числовой.
Посмотрел как упаковывает эксель - тип double.
пробовал принудительно перед загрузкой задавать числу формат double не получилось.
эксель почему то из числа убирает запятую и переносит её в конец.
...
Рейтинг: 0 / 0
Криво вставляет в EXCEL из DataTable
    #39586896
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
saleyСначала привожу данные к типу object, потом вставляю данные с помощью функции

m_objRange.set_Value(m_objOpt, objData);приведи к double
...
Рейтинг: 0 / 0
Криво вставляет в EXCEL из DataTable
    #39586934
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А, ты это и сделал в последнем сообщении....
Можешь тестовый проектик кинуть? - поэкспериментирую
...
Рейтинг: 0 / 0
Криво вставляет в EXCEL из DataTable
    #39588088
saley
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro, вот набросал тестовый проект.
у меня эксель 2013(разницы нет какая версия, будет работать криво на любой).

Но кажется я понял в чём моя проблема. запутался с типами данных.
Когда создаю datatable, все поля по умолчанию string(типа varchar нет).
Даже если ради примера делаю так
dt.Rows[0][0] = Convert.ToDouble(dGV[0, 0].Value);
всё равно тип string и когда потом вставляю в эксель через object
obj[0] = dt.Rows[0][0];
эксель начинает чудить
если задавать в таблице жёстко тип поля Double, то пропадает текст.

Тогда следующий вопрос, а можно без цикла получить массив значений Value типа object из DataGridView
...
Рейтинг: 0 / 0
Криво вставляет в EXCEL из DataTable
    #39588198
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если цель сделать аудит процессов, то для этого уже всё есть
https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2008-R2-and-2008/cc775520(v=ws.10)
...
Рейтинг: 0 / 0
Криво вставляет в EXCEL из DataTable
    #39588248
saley
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Mejtesесли цель сделать аудит процессов, то для этого уже всё есть
https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2008-R2-and-2008/cc775520(v=ws.10)
Это наверное в предыдущий пост. У меня проблема с другим процессом.
...
Рейтинг: 0 / 0
Криво вставляет в EXCEL из DataTable
    #39588318
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
saleyRoman Mejtesесли цель сделать аудит процессов, то для этого уже всё есть
https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2008-R2-and-2008/cc775520(v=ws.10)
Это наверное в предыдущий пост. У меня проблема с другим процессом.
сори, промахнулся темой =)
...
Рейтинг: 0 / 0
Криво вставляет в EXCEL из DataTable
    #39588352
Pu4koff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как-то всё сложно
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
private void Form1_Load(object sender, EventArgs e)
        {   dt = new DataTable();
            dt.Columns.Add("Col", typeof(double));
            
            dt.Rows.Add();
            dt.Rows.Add();
            dt.Rows[0][0] = 567890.345677888;
            dt.Rows[1][0] = 987999.50637379;
            //dGV.Rows.Add(2);
            dGV.DataSource = dt;
            /*dGV[0, 0].Value = dt.Rows[0][0];
            dGV[0, 1].Value = dt.Rows[1][0];*/
            //dGV.Columns[0].DefaultCellStyle.Format = "#,##0.####";
            
        }


У меня 2017 офис. при исходном варианте первое число вставлялось нормально, а второе как строка.
Код: c#
1.
2.
3.
object[] obj = new object[2];
            obj[0] = Convert.ToDouble(dt.Rows[0][0]); // это уходило как double и нормально вставлялось
            obj[1] =  dt.Rows[1][0]; // это в массив попадало как string и неправильно воспринималось excel


ЗЫ. Если не планируются никакие специфические экселевские формулы и т.д. и т.п., лучше пользуйте ClosedXml или подобное, чтобы просто работали с файлом, без всех этих Interop штук.
...
Рейтинг: 0 / 0
Криво вставляет в EXCEL из DataTable
    #39589996
saley
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pu4koff,
дело не в сложности, этот проект для примера.
Вообще хотелось понять что происходит.
Теперь всё понятно. Вопрос исчерпан.
Всем спасибо.
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Криво вставляет в EXCEL из DataTable
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]