Как настроить формат даты при создании ячеек Excel через javascript (activexobject)? - PullRequest
1 голос
/ 19 декабря 2008

Я пытаюсь преобразовать таблицу HTML в Excel в Javascript, используя новый ActiveXObject("Excel.application"). По сути, я перебираю ячейки таблицы и вставляю значение в соответствующую ячейку в Excel:

//for each table cell
oSheet.Cells(x,y).value = cell.innerText;

Проблема заключается в том, что когда ячейка имеет формат даты «дд-мм-гггг» (например, 10-09-2008), Excel будет выглядеть как «мм-дд-гггг» (т.е. 09 октября 2008 г.). Я пытался указать NumberFormat как:

oSheet.Cells(x,y).NumberFormat = 'dd-mm-yyyy';

Но это не имеет никакого эффекта. Кажется, это влияет только на то, как Excel отображает значение, а не анализирует . Мое единственное решение сейчас состоит в том, чтобы поменять дату как:

var txt = cell.innerText;
if(/^(\d\d)-(\d\d)-\d\d\d\d$/.test(txt)) txt = txt.replace(/^(\d\d)-(\d\d)/,'$2-$1');

Но я волнуюсь, что это не универсальный вариант, и настройки другого компьютера могут не сработать.

Есть ли способ указать, как лучше разобрать входное значение?

Ответы [ 5 ]

0 голосов
/ 21 июля 2011

вместо

oSheet.Cells(x,y).NumberFormat = 'dd-mm-yyyy'; 

установить это:

oSheet.Cells(x,y).NumberFormat = 14;
0 голосов
/ 29 октября 2010

Я попробовал ваш код, но в конце процесса я повторно применил формат к столбцам, содержащим даты. Он отлично работает, независимо от того, какой локальный язык вы настроили на своем компьютере.

Будучи моим объектом Excel, определенным как «шаблон», как только я заполнил его данными, я применил (только для примера):

template.ActiveSheet.Range("D10:F99").NumberFormat = "dd/MMM/yyyy;@";

С наилучшими пожеланиями

0 голосов
/ 22 декабря 2008

Вы можете избежать синтаксического анализа даты в Excel, введя данные в собственном «последовательном» формате даты. например, «22 декабря 08» - 39804 в качестве серийной даты Excel. (См. здесь для хорошего объяснения этого)

Затем отформатируйте ячейку, как вы делали раньше.

0 голосов
/ 27 октября 2010
  1. определяет, какие форматы нейтральных форматов Excel поддерживает

  2. используйте javascript для анализа строки даты и вывода в соответствующем формате

Я не знаю, какие форматы поддерживает Excel, но вы бы хотели что-то вроде .net туда-обратно или сортируемые форматы , где он всегда будет читаться последовательно.

для # 2, если вы можете доверять javascript для создания подходящей даты из любой строки, которую вы ей передаете, это нормально. если вы не уверены в этом, вы можете взглянуть на такую ​​библиотеку, как datejs , где вы можете более точно определить, что вы хотите, чтобы произошло.

0 голосов
/ 19 декабря 2008

В Vbscript мы используем, чтобы решить эту проблему с помощью

    If IsDate ( Cell.Value ) Then
         Cell.Value = DateValue ( Cell.Value )
    End If

Может быть, в java-скрипте тоже нужно играть с таким же подходом.

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