2017-12-15 2 views
0

geben '', hexadezimaler Wert 0x02, ist ein ungültiges Zeichen FehlerC# Export nach Excel zu geben '', Hexadezimalwert 0x02, Fehler ein ungültiger Zeichen ist

foreach (DataRow dataRow in data.Rows) 
    { 
     row = new DocumentFormat.OpenXml.Spreadsheet.Row { RowIndex =+rowcount}; 
     for (int i = 0; i < fieldsToExpose.Length; i++) 
      { 
       row.Append(CreateTextCell(ColumnLetter(i), rowcount,dataRow[fieldsToExpose[i]].ToString())); 
      } 
      sheetData.AppendChild(row); 
    } 
worksheetPart.Worksheet.Save(); 

Fehler beim Abruf beim Speichern die worksheetPart.Worksheet.Save(), weil ‚Reihe‘ den Wert hexadezimal enthält

+0

können Sie mir bitte mehr detai liefern ls? –

+0

Können Sie Ihre Daten, die Sie durchforsten, reduzieren, damit Sie aufspüren können, welcher Teil davon tatsächlich das Problem verursacht? Ist es eine bestimmte Zelle oder ist es in der gesamten Tabelle endemisch? – REW

+0

Ist der Daten Unicode oder Binär? – jdweng

Antwort

0
//Try some thing like this... You can export your entire dataGridView through this. 

    using System; 
    using System.Collections.Generic; 
    using System.ComponentModel; 
    using System.Data; 
    using System.Drawing; 
    using System.Linq; 
    using System.Text; 
    using System.Threading.Tasks; 
    using System.Windows.Forms; 
    using System.Data.Sql; 
    using System.Data.SqlClient; 
    using System.Configuration; 


      void ExportTOExcel(DataGridView gridviewID) 
      { 


       Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application(); 

       Microsoft.Office.Interop.Excel.Workbook xlWorkBook; 
       Microsoft.Office.Interop.Excel.Worksheet xlWorkSheet; 
       object misValue = System.Reflection.Missing.Value; 

       xlApp = new Microsoft.Office.Interop.Excel.Application(); 
       xlWorkBook = xlApp.Workbooks.Add(misValue); 
       xlWorkSheet = (Microsoft.Office.Interop.Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1); 

       //add data 
       int StartCol = 1;`enter code here` 
       int StartRow = 1; 
       int j = 0, i = 0; 

       //Write Headers 
       for (j = 0; j < gridviewID.Columns.Count; j++) 
       { 
        Microsoft.Office.Interop.Excel.Range myRange = (Microsoft.Office.Interop.Excel.Range)xlWorkSheet.Cells[StartRow, StartCol + j]; 
        myRange.Value2 = gridviewID.Columns[j].HeaderText; 
       } 

       StartRow++; 

       //Write datagridview content 
       for (i = 0; i < gridviewID.Rows.Count; i++) 
       { 
        for (j = 0; j < gridviewID.Columns.Count; j++) 
        { 
         try 
         { 
          Microsoft.Office.Interop.Excel.Range myRange = (Microsoft.Office.Interop.Excel.Range)xlWorkSheet.Cells[StartRow + i, StartCol + j]; 
          myRange.Value2 = gridviewID[j, i].Value == null ? "" : gridviewID[j, i].Value; 
         } 
         catch 
         { 
          ; 
         } 
        } 
       } 

       Microsoft.Office.Interop.Excel.Range chartRange; 

       Microsoft.Office.Interop.Excel.ChartObjects xlCharts = (Microsoft.Office.Interop.Excel.ChartObjects)xlWorkSheet.ChartObjects(Type.Missing); 
       Microsoft.Office.Interop.Excel.ChartObject myChart = (Microsoft.Office.Interop.Excel.ChartObject)xlCharts.Add(10, 80, 300, 250); 
       Microsoft.Office.Interop.Excel.Chart chartPage = myChart.Chart; 

       chartRange = xlWorkSheet.get_Range("A1", "B" + gridviewID.Rows.Count); 
       chartPage.SetSourceData(chartRange, misValue); 
       chartPage.ChartType = Microsoft.Office.Interop.Excel.XlChartType.xlColumnClustered; 

       xlApp.Visible = true; 

      } 

     } 
    }