Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Export to Excel: NumberFormat


Автор: kulibin 12.6.2006, 20:39
Чёто NumberFormat никак не получается изнасиловать:
Код

try
                //тут всегда глючит:
                {
                    sh.get_Range(sh.Cells[3, 8], sh.Cells[rn, 8]).NumberFormat = "0.00";
                    sh.get_Range(sh.Cells[3, 5], sh.Cells[rn, 5]).NumberFormat = "0.00";
                }
                catch { MessageBox.Show("Знов ця хурда-мурда!!!"); }
                //а тут уже нормально всё идёт:
                sh.get_Range(sh.Cells[3,2],sh.Cells[rn,3]).WrapText=true;
                sh.get_Range(sh.Cells[2,1],sh.Cells[rn,8]).Borders.ColorIndex=0;
                sh.get_Range(sh.Cells[2, 1], sh.Cells[2, 8]).Font.Bold = true;

Как я токо не пытался: "Standard", "# ### ##0.00", "0.00". Причём странно то, что такой вариант нормально воспринимается: "#" - жалко только полезного ничего не делает smile.
Помогите плз кто чем может. Целый день парюсь с одним отчётом - там без этого никак.
Да - и ещё деталь такая - это вс 2005. Я поиском пытался такое искать - всё по вс 2003 выдаёт smile. А там как-то вообще по другому. Там using microsoft.... и т.д. в конечном итоге Excel. А в 2005-й так не получается почемуто. Хотя может это в версии Express - может там это как отдельный компонент. Вобщем я референс добавил на Excel 10. И всё почти работает. Странно только когда using пытался написать начало ругаться мол что-то там дублируется в названиях - ну я юзинг убрал и полный путь писаю. Токо этот намбер-формат свинский не хотит работать.  

Автор: kulibin 12.6.2006, 21:54
Наконец то осенило меня. Так нормально работает:
Код

sh.get_Range(sh.Cells[3, 8], sh.Cells[rn, 8]).NumberFormat = "# ##0,00";
sh.get_Range(sh.Cells[3, 5], sh.Cells[rn, 5]).NumberFormat = "# ##0,00";

Короче в маске была точка - ругалось. А стала запятая - теперь работает. Я что-то не очень понял этого прикола - ведь и в ВБА и в шарпе всегда точка в маске как разделитель целой и дробной части числа. Есть опасение, что у меня вот оно сейчас работает - а у кого-то на другой машине может точку потребовать. Чёрт его знает что за ерунда. А именованый формат "Standard" тоже почему-то игнорирует smile. Странно всё это. Может я чего-то не понимаю? Может знает кто в чём тут прикол? 

Автор: mr.DUDA 14.6.2006, 11:17
Возможно, символ разделителя сильно от самого экселя зависит. А получить разделитель для текущей культуры в .NET можно из Thread.CurrentThread.CurrentUICulture.NumberFormat.NumberDecimalSeparator 

Автор: kulibin 14.6.2006, 12:19
а - в том то и прикол: разделитель то зпт - но в маске везде - в т.ч. и в самом Excel - тчк! В самомо же Excel макрос записал - поставил через формат ячейки числовой формат с двумя знаками после зпт - и сам же Excel написал код макроса. И там используется маска для этого формата такого вида: "0.00" - т.е. точка в ней! А когда абсолютно то же самое через шарп делаю - зпт на том же месте почемуто хотит он. Блин интересно всё же - в чём тут прикол? 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)