DataTable保存为Excel或者Txt
保存为txt的时候,可保持原来的行列对齐,如下:
using System; using System.Collections.Generic; using System.Text; using System.Data; using System.IO; using System.Windows.Forms; using System.Reflection; namespace celiang { public class saveDataTableToExcelTxt { public saveDataTableToExcelTxt(DataTable table,string fullName) { string extention = Path.GetExtension(fullName); if(extention==".txt")//如果保存为txt文件 { if(ExportToTxt(table,fullName)==true) { MessageBox.Show("保存成功","提示"); } } else if(extention==".xls") { if (ExportToExcel(table, fullName)) { MessageBox.Show("保存成功","提示"); } } } /// <保存DataTable 到Excel> /// /// </summary> /// <param name="table"></param> /// <param name="excelName"></param> /// <returns></returns> private bool ExportToExcel(System.Data.DataTable table, string excelName) { Microsoft.Office.Interop.Excel.Application oXL; Microsoft.Office.Interop.Excel.Workbook oWB; Microsoft.Office.Interop.Excel.Worksheet oSheet; Microsoft.Office.Interop.Excel.Range oRange; // Start Excel and get Application object. oXL = new Microsoft.Office.Interop.Excel.Application(); // Set some properties oXL.Visible = false; oXL.DisplayAlerts = false; // Get a new workbook. oWB = oXL.Workbooks.Add(Missing.Value); // Get the active sheet oSheet = (Microsoft.Office.Interop.Excel.Worksheet)oWB.ActiveSheet; oSheet.Name = "Customers"; // Process the DataTable // BE SURE TO CHANGE THIS LINE TO USE *YOUR* DATATABLE System.Data.DataTable dt = table; int rowCount = 1; foreach (DataRow dr in dt.Rows) { rowCount += 1; for (int i = 1; i < dt.Columns.Count + 1; i++) { // Add the header the first time through if (rowCount == 2) { oSheet.Cells[1, i] = dt.Columns[i - 1].ColumnName; } oSheet.Cells[rowCount, i] = dr[i - 1].ToString(); } } // Resize the columns oRange = oSheet.get_Range(oSheet.Cells[1, 1], oSheet.Cells[rowCount, dt.Columns.Count]); oRange.EntireColumn.AutoFit(); // Save the sheet and close oSheet = null; oRange = null; oWB.SaveAs(excelName, Microsoft.Office.Interop.Excel.XlFileFormat.xlWorkbookNormal, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlExclusive, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value); oWB.Close(Missing.Value, Missing.Value, Missing.Value); oWB = null; oXL.Quit(); // Clean up // NOTE: When in release mode, this does the trick GC.WaitForPendingFinalizers(); GC.Collect(); GC.WaitForPendingFinalizers(); GC.Collect(); return true; } private bool ExportToTxt(System.Data.DataTable table ,string fullName) { int[] iColumnLength = new int[table.Columns.Count]; FileStream fileStream = new FileStream(fullName, FileMode.Create); StreamWriter streamWriter = new StreamWriter(fileStream, System.Text.Encoding.Unicode); StringBuilder strBuilder = new StringBuilder(); for (int i = 0; i < table.Columns.Count; i++) { int iLength = 0; for (int j = 0; j < table.Rows.Count; j++) { if (iLength < (table.Rows[j][i].ToString()).Length) { iLength = (table.Rows[j][i].ToString()).Length; } } iColumnLength[i] = iLength; } for (int i = 0; i < table.Rows.Count - 1; i++) { for (int j = 0; j < table.Columns.Count; j++) { string str1 = table.Rows[i][j].ToString(); int iLength = str1.Length; int iColumnWidth = iColumnLength[j] + 4; for (int k = iLength; k < iColumnWidth; k++) { str1 += " "; } if (j == table.Columns.Count - 1) { strBuilder.AppendLine(str1); } else { strBuilder.Append(str1); } } } streamWriter.WriteLine(strBuilder.ToString()); streamWriter.Close(); fileStream.Close(); return true; } } }