2016-10-13 2 views
1

Я создаю приложение для окон.Как я могу экспортировать значение форматирования ячейки datagridview в excel?

При нажатии кнопки «Экспорт» данные данных datagridview `s экспортируются в файл Excel.

Я уже построил этот код, и он хорошо работает. Но сегодня я обновил свой код.

добавить CellFormatting событие DataGridView, значение размера изменения файла и отображение

его к DataGridView.

И затем, я экспортировал, чтобы преуспеть, но в Ехчел, до сих пор исходные данные showend

, что означает, исходные данные 451936256 и преобразованные данные 431MB

В Excel листа, он показал 451936256.

мой код ниже

//Button click Event 
    private void mtbtnExportToExcel_Click(object sender, EventArgs e) 
      { 
       DataGridView[] dgv = new DataGridView[] { mgrdWebApplication, mgrdContentDatabase, mgrdSiteCollections, mgrdSites, mgrdLists, mgridDocumentLibrary }; 
       mtProgressStatus.Spinning = true; 
       ExportDataToExcel(dgv, "MigStatus"); 
       mtProgressStatus.Spinning = false; 

      } 
    //Export gridview data to excel 
    private bool ExportDataToExcel(DataGridView[] dgv, string fileName) 
      { 
       string saveFileName = ""; 
       SaveFileDialog saveDialog1 = new SaveFileDialog(); 
       saveDialog1.DefaultExt = "xlsx"; 
       saveDialog1.Filter = "Excel file|*.xlsx"; 
       saveDialog1.FileName = fileName; 
       saveDialog1.ShowDialog(); 
       saveFileName = saveDialog1.FileName; 

       if (saveFileName.IndexOf(":") < 0) 
        return false; 

       Excel.Application xlApp = new Excel.Application(); 

       if (xlApp == null) 
       { 
        MessageBox.Show("Can`t create Excel"); 
        return false; 
       } 

       Excel.Workbooks workBooks = xlApp.Workbooks; 
       Excel.Workbook workBook = xlApp.Workbooks.Add(Excel.XlWBATemplate.xlWBATWorksheet); 
       Excel.Worksheet workSheet = (Excel.Worksheet)workBook.Worksheets[1]; 

       try 
       { 
        for (int index = 0; index < dgv.Length; index++) 
        { 
         for (int i = 0; i < dgv[index].ColumnCount; i++) 
         { 
          if (dgv[index].Columns[i].Visible) 
           workSheet.Cells[1, i + 1] = dgv[index].Columns[i].HeaderText; 
         } 

         for (int r = 0; r < dgv[index].Rows.Count; r++) 
         { 
          for (int i = 0; i < dgv[index].ColumnCount; i++) 
          { 
           if (dgv[index].Columns[i].Visible) 
            workSheet.Cells[r + 2, i + 1] = dgv[index].Rows[r].Cells[i].Value.ToString(); 
          } 
          Application.DoEvents(); 
         } 
         ((Excel.Range)workSheet.Rows[1, Type.Missing]).Font.Bold = true; 
         workSheet.Columns.EntireColumn.AutoFit(); 

         if (index < dgv.Length - 1) 
         { 
          workSheet = (Excel.Worksheet)workBook.Worksheets.Add(); 
         } 
        } 
       } 
       catch(Exception ex) 
       { 
        //LogWrite logWrites = new LogWrite(); 
        writeLog.LogsWrite(ex.ToString()); 
       } 

       if (saveFileName != "") 
       { 
        try 
        { 
         workBook.Saved = true; 
         workBook.SaveCopyAs(saveFileName); 
        } 
        catch(Exception ex) 
        { 
         MessageBox.Show("Error, file is already opened!\n" + ex.Message); 
        } 
       } 
       xlApp.Quit(); 
       GC.Collect(); 
       MessageBox.Show("File : " + fileName + ".xls saved.", "Message", MessageBoxButtons.OK, MessageBoxIcon.Information); 

       return true; 
      } 
     //CellFormatting Event 
     private void mgrdContentDatabase_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e) 
     { 
      if(this.mgrdContentDatabase.Columns[e.ColumnIndex].HeaderText== "Size(GB)") 
      { 
       if (e.Value != null) 
       { 
        CovertFileSize(e); 
       } 
      } 
     } 
     //convert to file size 
     private void CovertFileSize(DataGridViewCellFormattingEventArgs formatting) 
     { 
      if (formatting.Value != null) 
      { 
       try 
       { 
        long bytes; 
        bytes = Convert.ToInt64(formatting.Value); 
        string size = "0 Bytes"; 

        //GB 
        if (bytes >= 1073741824.0) 
         size = String.Format("{0:##.##}", bytes/1073741824.0) + " GB"; 
        //MB 
        else if (bytes >= 1048576.0) 
         size = String.Format("{0:##.##}", bytes/1048576.0) + " MB"; 
        //KB 
        else if (bytes >= 1024.0) 
         size = String.Format("{0:##.##}", bytes/1024.0) + " KB"; 
        //Bytes 
        else if (bytes > 0 && bytes < 1024.0) 
         size = bytes.ToString() + " Bytes"; 

        formatting.Value = size; 
        formatting.FormattingApplied = true; 
       } 
       catch(FormatException) 
       { 
        formatting.FormattingApplied = false; 
       } 
      } 

     } 

Я хочу, чтобы экспортировать преобразованные данные, чтобы преуспеть.

Пожалуйста, помогите мне, как я могу исправить или добавить свой код ..

благодаря

ответ

1

Вы должны использовать FormattedValue свойства ячейки:

string value = string.Format("{0}" , dataGridView1.Rows[r].Cells[i].FormattedValue); 
+0

Еще раз спасибо Реза Aghaei !!! Ты мой босс! Я немного изменил ваш код и вставляю в свой код и хорошо работает! :) –

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