Экспорт в Excel с использованием OpenXML и C #, целых чисел и даты

Я пишу приложение, которое должно экспортировать данные из приложения карты. Это приложение использует Silverlight, и для облегчения экспорта в Excel я использую эту библиотеку. Все данные по умолчанию представлены в строках. Когда я пишу в электронную таблицу, я пытаюсь разобрать каждую строку, чтобы увидеть, какой тип она есть:

string str = kvp.Value; int i = 0; long l = 0; decimal dec = 0; DateTime dt; if (int.TryParse(str, out i)) doc.Workbook.Sheets[0].Sheet.Rows[r].Cells[c].SetValue(i); else if (decimal.TryParse(str, out dec)) doc.Workbook.Sheets[0].Sheet.Rows[r].Cells[c].SetValue(dec); else if (long.TryParse(str, out l)) doc.Workbook.Sheets[0].Sheet.Rows[r].Cells[c].SetValue(l); else if (DateTime.TryParse(str, out dt)) doc.Workbook.Sheets[0].Sheet.Rows[r].Cells[c].SetValue(dt); else doc.Workbook.Sheets[0].Sheet.Rows[r].Cells[c].SetValue(str); 

Это отлично работает, за исключением DateTime и когда я пытаюсь разобрать номер социального страхования, который в моем случае составляет 12 символов.

Номер социального страхования анализируется как десятичное число и отображается в научной форме в Excel. Из того, что я собрал в процессе чтения, это похоже на ограничение в Excel. Однако, если я отмечаю ячейку, я вижу правильное число в верхней строке, где вы можете писать формулы. Я решил эту проблему до сих пор, просто поставив это число в виде строки и разрешив конечному пользователю обработать его на данный момент, но мне бы очень хотелось, чтобы это было число в готовом документе. Это возможно?

Что действительно пугает мой разум, это DateTime. Формат даты поступает из приложения: 10/15/2013 1:10:00 AM. Это похоже на файл Excel: 2455075.

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

Функция SetValue должна автоматически идентифицировать следующие типы:

  • BOOL
  • DateTime
  • десятичная дробь
  • исключение
  • SharedStringDefinition
  • строка

Прошу прощения за длинный пост. Это сводится к следующим вопросам:

  • Могу ли я заставить Excel обрабатывать длинные номера без научной нотации программно?
  • Почему DateTime выводится в такой странный формат?

Для установки значения Cell Value in Date вам необходимо преобразовать DateTime в дату автоматизации OLE. Также вы можете создать более понятный метод для записи значений ячеек. Что-то вроде этого:

 public bool UpdateValue(WorkbookPart wbPart, string sheetName, string addressName, string value, UInt32Value styleIndex, CellValues dataType) { // Assume failure. bool updated = false; Sheet sheet = wbPart.Workbook.Descendants<Sheet>().Where( (s) => s.Name == sheetName).FirstOrDefault(); if (sheet != null) { Worksheet ws = ((WorksheetPart)(wbPart.GetPartById(sheet.Id))).Worksheet; Cell cell = InsertCellInWorksheet(ws, addressName); if (dataType == CellValues.SharedString) { // Either retrieve the index of an existing string, // or insert the string into the shared string table // and get the index of the new item. int stringIndex = InsertSharedStringItem(wbPart, value); cell.CellValue = new CellValue(stringIndex.ToString()); } else { cell.CellValue = new CellValue(value); } cell.DataType = new EnumValue<CellValues>(dataType); if (styleIndex > 0) cell.StyleIndex = styleIndex; // Save the worksheet. ws.Save(); updated = true; } return updated; } 

Затем вызовите этот метод следующим образом (первый вызов для String second для DateTime):

 UpdateValue(workbookPart, wsName, "D14", "Some text", 0, CellValues.String); UpdateValue(workbookPart, wsName, "H13", DateTime.Parse("2013-11-01").ToOADate().ToString(CultureInfo.InvariantCulture), 0, CellValues.Date); 
  • как преобразовать файл xls в файл xlsx с помощью c #
  • (C #) OpenXML импортирует xlsx в DataTable с правильным типом данных столбца
  • Трансформация странности
  • Добавление даты в ячейке Excel с помощью OpenXML
  • Экспортировать таблицу excel в xml с помощью сопоставлений xml и Open XML
  • Ячейки XML неправильно отображаются как SharedStrings, если они не являются
  • Получите используемый диапазон электронной таблицы Open XML на английских метрических единицах (ЭВС)
  • Msgstr "Указанный пакет недействителен. Основная часть отсутствует. "В закрытом XML
  • Как скрыть столбцы в электронной таблице OpenXML с помощью C #?
  • Как создать многостраничный Excel в MarkLogic
  • В чем смысл t = "array" для элемента формулы
  • Давайте будем гением компьютера.