Help! Экспорт данных из программы на C# в Excel
ты просто в .csv пишешь и неработает?
private void LoadValueListObject(Excel.ListObject obj, int calculationsLogID)
{
string id = obj.Name;
if (!string.IsNullOrEmpty(id
{
BusinessLogic.BLUserFormsList lstUserForm = BusinessLogic.BLUserFormsList.GetUserFormList;
BusinessLogic.BLUserForms form = lstUserForm.FindByID(int.Parse(id;
if (form.UserFormTable != null)
{
BusinessLogic.BLCalculationsLogPropertiesList value = BusinessLogic.BLCalculationsLogPropertiesList.GetCalculationsLogPropertiesList(dtFilter.Value, calculationsLogID);
form.LoadTableValues(value);
for (int j = 1; j < form.UserFormTable.Columns.Count; j++)
for (int i = 0; i < form.UserFormTable.Rows.Count; i++)
{
obj.Range[i + 2, j + 1] = form.UserFormTable.Rows[i][j]; ************ДОБАВЛЕНИЕ В EXCEL - НЕТ типизации для excel. он сам проводит преобразование, но для вещественных чисел не проводит
}
}
}
}
http://www.carlosag.net/Tools/ExcelXmlWriter/
Работает точно начиная с OfficeXP, не требует собственно екселя, а так же возни с интеропом. Там сможешь указать конкретно, какой тип поля
Вообще можно воспользоваться вот такой штукой: Работает точно начиная с OfficeXP, не требует собственно екселя, а так же возни с интеропом. Там сможешь указать конкретно, какой тип поля
НЕ получится. Уже используются динамические Excel объекты Excel.ListObject
НЕ получится.Что значит не получится? Нет возможности изменить код экспорта?
Уже используются динамические Excel объекты Excel.ListObject
Это всмысле через Interop? Там должно быть что-то на тему типизации ячейки,т.к. например из VB можно это сделать, хотя Interop то еще счастье.
Это всмысле через Interop? Там должно быть что-то на тему типизации ячейки,т.к. например из VB можно это сделать, хотя Interop то еще счастье.Именно это интересует. Можешь дать ссылочку с инфой? Где посмотреть подробнее можно
Пока не нашли принудительной установки числового типа
>>>Что значит не получится? Нет возможности изменить код экспорта?
Переписать не вариант , т.к. уже на это заточено куча кода - а проблема замечена на самом последнем этапе - из-за изменений требований заказчика
надо гуглить. Можешь открыть Excel, там создать макрос и в браузере объектов поискать, где выставляется тип данных у Range, а потом попытаться сделать аналогично в шарпе.
надо гуглить. Можешь открыть Excel, там создать макрос и в браузере объектов поискать, где выставляется тип данных у Range, а потом попытаться сделать аналогично в шарпе.Уже опробавано. Тока проблема в том, когда вставляется вещественное число как строка и потом переводится в число.. скрипт нечего не записывает
Тока проблема в том, когда вставляется вещественное число как строка и потом переводится в число..утерял мысль.
form.UserFormTable.Rows[i][j] - возвращает double?
form.UserFormTable.Rows[i][j] - возвращает double?Вообще object, но можно привести к double, тока от этого толку
Наверняка можно в него засунуть данные не только через Range[a, b] = value, а и как-нибудь через SetValue(a, b, value, ValueSetParams.Type_Double).
В MSDN должно быть написано, что можно делать с Excel.ListObject.Эх... ну это понятно.. буду дальше рыть
Наверняка можно в него засунуть данные не только через Range[a, b] = value, а и как-нибудь через SetValue(a, b, value, ValueSetParams.Type_Double).
А вообще.. если абстрагироваться... то через Excel`кий объект Range можно добавить в Excel типизированные данные?
Тред читал по диагонали. Здесь уже писали, что перед вставкой данных в экзель следует задать форматы ячеек?
Тред читал по диагонали. Здесь уже писали, что перед вставкой данных в экзель следует задать форматы ячеек?Вообще как я поняла. если ты имешь ввиду формат вывода, то это не катит, а вот если ты имешь формат самих данных, то это оно... тока не понятно как... вот например в строку можно все перевести так:
Excel.Range)obj.Range[i + 2, j + 1]).NumberFormat = "@";
а вот как указать чтоб была токо число...
а вот как указать чтоб была токо число...Запусти экзель, нажми ^1 и выбери в списке форматов "(все форматы)". Ещё рекомендую почитать информацию о работе с экзелем на сайте "Королевско Дельфи". Всё-таки у Delphi-программистов накопилось гораздо больше опыта в решении подобных задач, а на уровне COM-интерфейса подобные проблемы не зависят от языка, если не считать специфики работы с самим COM-ом.
obj.Range[i + 2, j + 1] =
я не профессор C# конечно
но в Excel есть разница написать Cells(i,j)=A или Cells(i,j).Value =A
думаю должно быть что-то типа:
obj.Range[i + 2, j + 1].Value = Dbl(form.UserFormTable.Rows[i][j]);
я не профессор C# конечнок сожалению этот вариант также не подошел - уже пробовали
но в Excel есть разница написать Cells(i,j)=A или Cells(i,j).Value =A
думаю должно быть что-то типа:
В ответ на:
obj.Range[i + 2, j + 1].Value = Dbl(form.UserFormTable.Rows[i][j]);
также пробовали obj.Range[i + 2, j + 1].Value2
В конечном итоге договорились с заказчиком - что будет править пользователь уже в Excel с помощью внутренней функции ЗНАЧЕН (ссылка на ячейку) - возвращает из текста число
Excel.Range)obj.Range[i + 2, j + 1]).NumberFormat = "@";а вот как указать чтоб была токо число...Excel.Range)obj.Range[i + 2, j + 1]).NumberFormat = "0.00";
легко смотрится записью макроса
NumberFormat - верное решение, мы его же использовали для дат и для требуемого отображения сумм.
Оставить комментарий
stm5943770
Нужен совет как побороть проблему.Есть программа, которая считает какие-то данные. В результате имеем кучу вещественных чисел.
Пытаемся программно экспортировать данные в Excel и после экспорта Excel воспринимает вещественные числа как строки. Нужно чтобы без доп. преобразований эти чиселки потом в формулах использовались (соответственно чтобы сразу получали нужное в Excel)
Как можно это сделать ?