2015-12-15 5 views
3

Я создам файл Excel с именем, датой и кодом для «моего» приватного конкурса.Строка формата Excel

Он отлично работает, но выглядит не так хорошо. Как я могу отформатировать ячейки для чтения даты и текста вставки? Имя и Контент не может быть прочитан на всех Excel sample screenshot

Excel.Application _xlApp = new Excel.Application(); 
    Excel.Workbook _xlWorkBook; 
    Excel.Worksheet _xlWorkSheet; 
    object misValue = System.Reflection.Missing.Value; 

    internal void CreateExcelFile(string writePath) 
    { 
     this.CreateHeader(); 
     this.AddContent(); 
     this.SaveFile(writePath); 
    } 
    private void CreateHeader() 
    { 
     _xlWorkBook = _xlApp.Workbooks.Add(misValue); 
     _xlWorkSheet = (Excel.Worksheet)_xlWorkBook.Worksheets.get_Item(1); 

     _xlWorkSheet.Cells[1, ExcelObject.SAMNAME] = "SAM_NAME"; 
     _xlWorkSheet.Cells[1, ExcelObject.DATE] = "Date"; 
     _xlWorkSheet.Cells[1, ExcelObject.CODE] = "Code"; 
     FormatCells(_xlWorkSheet.Cells.Borders); 
    } 
    private void AddContent() 
    { 
     int i = 1; 
     ++i; 
     _xlWorkSheet.Cells[i, ExcelObject.Date] = DateTime.Now.ToString("yyyyMMdd_HHmmss"); 
     _xlWorkSheet.Cells[i, ExcelObject.SAMNAME] = "Julek"; 

    } 
    private void FormatCells(Excel.Borders _borders) 
    { 
     _borders[Excel.XlBordersIndex.xlEdgeLeft].LineStyle = Excel.XlLineStyle.xlContinuous; 
     _borders[Excel.XlBordersIndex.xlEdgeRight].LineStyle = Excel.XlLineStyle.xlContinuous; 
     _borders[Excel.XlBordersIndex.xlEdgeTop].LineStyle = Excel.XlLineStyle.xlContinuous; 
     _borders[Excel.XlBordersIndex.xlEdgeBottom].LineStyle = Excel.XlLineStyle.xlContinuous; 
     _borders.Color = ConsoleColor.Black; 
    } 
    private void SaveFile(string writePath) 
    { 
     string fileName = string.Format("{0}_{1}.xls","SampleFile", DateTime.Now.ToString("yyyyMMdd_HHmmss")); 
     _xlWorkBook.SaveAs(Path.Combine(writePath, fileName), Excel.XlFileFormat.xlWorkbookNormal, misValue, 
      misValue, misValue, misValue, Excel.XlSaveAsAccessMode.xlExclusive, misValue, misValue, misValue, misValue, misValue); 
     _xlWorkBook.Close(true, misValue, misValue); 
     _xlApp.Quit(); 

     ReleaseObject(_xlWorkSheet); 
     ReleaseObject(_xlWorkBook); 
     ReleaseObject(_xlApp); 
    } 
    private void ReleaseObject(object obj) 
    { 
     try 
     { 
      System.Runtime.InteropServices.Marshal.ReleaseComObject(obj); 
      obj = null; 
     } 
     catch (Exception) { throw; } 
     finally 
     { 
      GC.Collect(); 
     } 
    } 
+2

Не могли бы вы указать, что вы хотите достичь? Вы хотите отформатировать ваши данные, чтобы Excel мог распознать его как дату? –

+0

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

+0

Если я могу дать вам один совет, используйте EPPlus (http://epplus.codeplex.com/) для создания/редактирования файлов Excel. Он имеет очень интуитивные методы для всего, что касается стиля, добавления DataTable, ширины столбцов, типа столбцов, типа celltype и т. Д. И может быть легко установлено через Nuget. У него есть метод для 'AutoColumnWidth' и т. Д., Который просто потрясающий для большинства простых файлов excel :) –

ответ

1

Укажите форматирование для всей колонки и использовать ToOADate() метод вместо .ToString("yyyyMMdd_HHmmss"):

// get the date cell 
Range rg = _xlWorkSheet.Cells[ExcelObject.DATE, ExcelObject.DATE]; 
// specify the format for the whole column 
rg.EntireColumn.NumberFormat = @"yyyyMMdd\_HHmmss"; 

// ... 

// write the current date 
_xlWorkSheet.Cells[i, ExcelObject.DATE] = DateTime.Now.ToOADate(); 

Я изменил формате от yyyyMMdd_HHmmss до yyyyMMdd\_HHmmss, потому что Excel конвертирует _ в пробел, а \ сохраняет символ подчеркивания так, как он есть.

Ширина столбца может быть автоматически изменено таким образом (этот метод вызывается в конце редактирования):

rg.EntireColumn.AutoFit(); 

AutoFit метод должен быть вызван в конце концов, когда были вставлены все данные. Он меняет ширину только один раз, когда он был вызван, но не постоянно.

+0

У меня есть короткий вопрос к этому, он отлично работает, но ширина столбца будет отформатирована для ширины заголовка, а не для вставленной даты с ... как я могу это изменить? –

+1

Метод 'AutoFit' должен быть вызван в конце, когда все данные были вставлены. Он меняет ширину только один раз, когда он был вызван, но не постоянно. –

+0

@invidicult, можете ли вы проверить, работает ли обновленный обновленный ответ, и принять этот ответ, только если он решает проблему. –

Смежные вопросы