Экспорт данных Sql в Excel, сохранение длинного int в строку в excel

У меня есть этот рабочий код С# для экспорта данных Sql Server для Excel. Проблема состоит в том, что один столбец содержит long int и появляется в excel как 6.71524E + 11. Поэтому я понимаю, что мы должны преобразовать его как строку в excel.

Как реализовать это в моем коде? Примеры были бы оценены.

public static void ExportToExcel(DataTable dt)
 {
 try
 {

 string conString = "Data Source=DELL\\SQLSERVER1;Trusted_Connection=True;DATABASE=Camo;CONNECTION RESET=FALSE";

 SqlConnection sqlCon = new SqlConnection(conString);
 sqlCon.Open();


 SqlDataAdapter da = new SqlDataAdapter("select TOP 10000 LocalSKU,ItemName, QOH,Price,Discontinued,Barcode,Integer2,Integer3,SalePrice,SaleOn,Price2 from dbo.Inventory", sqlCon);


 System.Data.DataTable dtMainSQLData = new System.Data.DataTable();

 da.Fill(dtMainSQLData);
 DataColumnCollection dcCollection = dtMainSQLData.Columns;

 // Export Data into EXCEL Sheet
 Microsoft.Office.Interop.Excel.ApplicationClass ExcelApp = new Microsoft.Office.Interop.Excel.ApplicationClass();
 ExcelApp.Application.Workbooks.Add(Type.Missing);

 int i = 1;

 int j = 1;
 //header row
 foreach (DataColumn col in dtMainSQLData.Columns)
 {
 ExcelApp.Cells[i, j] = col.ColumnName;
 j++;

 }

 i++;

 //data rows
 foreach (DataRow row in dtMainSQLData.Rows)
 {
 for (int k = 1; k < dtMainSQLData.Columns.Count + 1; k++)
 {
 ExcelApp.Cells[i, k] = row[k - 1].ToString();
 }
 i++;

 }

 ExcelApp.ActiveWorkbook.SaveCopyAs("C:/Users/Administrator.CAMO/Downloads/FtpFilesStorage/Export/Sheet1.xlsx");

 ExcelApp.ActiveWorkbook.Saved = true;
 ExcelApp.Quit();

 Console.WriteLine(".xlsx file Exported succssessfully.");
 }
3 ответа

Этот метод работает для экспорта в файл Excel.

private void ExportToExcel(DataTable Tbl, string ExcelFilePath = null)
{
 try
 {
 if (Tbl == null || Tbl.Columns.Count == 0)
 throw new Exception("ExportToExcel: Null or empty input table!\n");

 // load excel, and create a new workbook
 Excel.Application excelApp = new Excel.Application();
 //Excel.Workbook ExcelBookServices = excelApp.Workbooks.Add();
 excelApp.Workbooks.Add();

 // single worksheet
 Excel._Worksheet workSheet = (Excel._Worksheet)excelApp.ActiveSheet;

 // column headings
 for (int i = 0; i < Tbl.Columns.Count; i++)
 {
 workSheet.Cells[1, (i + 1)] = Tbl.Columns[i].ColumnName;
 }

 // rows
 for (int i = 0; i < Tbl.Rows.Count; i++)
 {
 // to do: format datetime values before printing
 for (int j = 0; j < Tbl.Columns.Count; j++)
 {
 workSheet.Cells[(i + 2), (j + 1)] = Tbl.Rows[i][j];
 }
 }

 workSheet.Columns.AutoFit();
 //workSheet.Columns.Style = "Output";
 //Excel.Range cell = ((Excel.Range)workSheet.Cells[Tbl.Rows.Count, Tbl.Columns.Count]);

 // check fielpath
 if (ExcelFilePath != null && ExcelFilePath != "")
 {
 try
 {
 workSheet.SaveAs(ExcelFilePath);
 excelApp.Quit();
 //File Saved Message
 }
 catch (Exception ex)
 {
 //ExportToExcel: Excel file could not be saved! Check filepath Message
 }
 }
 else // no filepath is given
 {
 excelApp.Visible = true;
 }
 }
 catch (Exception ex)
 {
 //Error in creating the Excel file
 ScriptManager.RegisterStartupScript(this, GetType(), "Message", "ExportToExcel: \n" + ex.Message, true);
 }
}


Измените цикл for на

int i = 1;
 int j = 1;
 //header row
 foreach (DataColumn col in dtMainSQLData.Columns)
 {
 ExcelApp.Cells[i, j] = col.ColumnName;
 j++;

 ExcelApp.Rows.AutoFit();
 ExcelApp.Columns.AutoFit();
 }

 i++;
 Console.Write("Progressing......65% \n Wait for around 8 minutes \r");
 //data rows
 foreach (DataRow row in dtMainSQLData.Rows)
 {
 for (int k = 1; k < dtMainSQLData.Columns.Count + 1; k++)
 {
 ExcelApp.Cells[i, k] = "'" + row[k - 1].ToString();

 }
 i++;

 ExcelApp.Columns.AutoFit();
 ExcelApp.Rows.AutoFit();
 }


используйте свойство NumberFormat: MyWorkBook.NumberFormat = "@";

licensed under cc by-sa 3.0 with attribution.