2017-02-09 1 views
0

с использованием следующего кода для экспорта данных в Excel из C#. Я поставлю один образец изображения с этим, чтобы лучше знать, что мне нужно.Как мы можем указать столбцы DataType для строки, число Datetime в Excel/SpreadSheet при экспорте из C#

NOt только для одного столбца мы не можем сказать, что этот тип подходит к определенному столбцу в excel. при экспорте diffrent данных

Этот код я использую это

  SpreadsheetDocument spreadsheetDocument = SpreadsheetDocument. 
        Create(savingFileName, SpreadsheetDocumentType.Workbook); 

       // Add a WorkbookPart to the document. 
       WorkbookPart workbookpart = spreadsheetDocument.AddWorkbookPart(); 
       workbookpart.Workbook = new DocumentFormat.OpenXml.Spreadsheet.Workbook(); 

       // Add a WorksheetPart to the WorkbookPart. 
       var worksheetPart = workbookpart.AddNewPart<WorksheetPart>(); 
       var sheetData = new SheetData(); 
       worksheetPart.Worksheet = new DocumentFormat.OpenXml.Spreadsheet.Worksheet(sheetData); 
       var bold1 = new System.Windows.Documents.Bold(); 
       DocumentFormat.OpenXml.Spreadsheet.CellFormat cf = new DocumentFormat.OpenXml.Spreadsheet.CellFormat(); 

       // Add Sheets to the Workbook. 
       DocumentFormat.OpenXml.Spreadsheet.Sheets sheets; 
       sheets = spreadsheetDocument.WorkbookPart.Workbook. 
        AppendChild<DocumentFormat.OpenXml.Spreadsheet.Sheets>(new DocumentFormat.OpenXml.Spreadsheet.Sheets()); 

       // Append a new worksheet and associate it with the workbook. 
       var sheet = new Sheet() 
       { 
        Id = spreadsheetDocument.WorkbookPart. 
         GetIdOfPart(worksheetPart), 
        SheetId = sheetId, 
        Name = "Sheet" + sheetId 
       }; 
       sheets.Append(sheet); 

       //Add Header Row. 
       var headerRow = new Row(); 
       headerRow.RowIndex = 10; 
       var cell=new Cell(); 
       foreach (DataColumn column in dtCollection.Columns) 
       { 
        cell = new Cell 
        { 
         DataType = CellValues.String, CellValue = new CellValue(column.ColumnName.ToUpper()) 
        }; 
        headerRow.AppendChild(cell); 

       } 
       sheetData.AppendChild(headerRow); 

       foreach (DataRow row in dtCollection.Rows) 
       { 
        var newRow = new Row(); 
        foreach (DataColumn col in dtCollection.Columns) 
        { 
         cell = new Cell 
         { 
          DataType = CellValues.String, 
          CellValue = new CellValue(row[col].ToString()) 
         }; 
         newRow.AppendChild(cell); 
        } 
        sheetData.AppendChild(newRow); 
       } 

       workbookpart.Workbook.Save(); 
       spreadsheetDocument.Close(); 

Изображение выглядит следующим образом enter image description here

в этом выше ПОС вы можете увидеть дебетовую и кредитную колонку оно должно быть числом, но с моим код может быть единственным словом
Тип столбца

  1. Кредит-номер
  2. Дебет-Номер
  3. Дата-Дата-время
  4. Код струна
  5. открытие Баланс-Номер

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

+0

Возможный дубликат [Как сделать правильный формат даты при записи данных в Excel] (http://stackoverflow.com/ вопросы/3310800/how-to-make-correct-date-format-when-writing-data-to-excel) – stratovarius

+0

Мне нужно не только датировать все типы, необходимые .. в одном excel. здесь мы не можем указать, какой тип столбца приходит каждый раз при экспорте в разных методах. –

+0

Это свойство NumberFormat является решением вашей реальной проблемы. Он охватывает все типы форматов, номера и т. Д. Но теперь вы задаете еще одну проблему: «Как отображать примитивные типы столбцов динамически на экспорт?» Я прав? Поскольку запрашиваемые столбцы могут отличаться в каждом экспорте? – stratovarius

ответ

0

Хорошо, вот два варианта, которые я могу быстро придумать.

  1. Если у вас есть несколько вариантов выбора столбца, а затем карта ColumnName < -> NumberFormat
  2. Если у вас слишком много возможности столбца, то карта primitiveType < -> NumberFormat (Однако вы можете иметь только один плавающие формат для всех десятичных столбцов, независимо от деловой потребности конкретного столбца)

Вот пример первой опции: используйте словарь для поиска, какой формат чисел вы должны вводить в каждый столбец.

var headerFormatMap = new Dictionary<string, string>(); // <columnHeader, NumberFormat> 
// i.e fill it like this 
headerFormatMap.Add("TransactionDate", "MM/DD/YYYY"); 
headerFormatMap.Add("Debit", "##.000"); // Display 37.75 as 37.750. 

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

// Assuming your first row is header. (I remember excel indexes start from 1) 
// Do this foreach column 
Range range = (Excel.Range)worksheetobject.Cells[1,1]; 
var header = (string)range.Value; 
range.EntireColumn.NumberFormat = headerFormatMap[header];  
Смежные вопросы