using System; using System.Data; using Excel= Microsoft.Office.Interop.Excel; namespace 读写excel { /// <summary> /// MainWindow.xaml 的交互逻辑 /// </summary> public partial class MainWindow { public MainWindow() { InitializeComponent(); // ReSharper disable once UnusedVariable //var x = GetData("d:\1.xlsx"); //GC.Collect(); //GC.WaitForPendingFinalizers(); //GC.Collect(); // test("d:\1.xlsx"); DataTable dt = new DataTable(); dt.Columns.Add(new DataColumn("sasfadf")); dt.Columns.Add(new DataColumn("sasfadf2")); dt.Columns.Add(new DataColumn("sasfadfss三代富贵")); for (int i = 0; i < 10; i++) { DataRow dr = dt.NewRow(); dr[0] = "1234"; dr[2] = "萨芬"; dr[1] = "asdfha"; dt.Rows.Add(dr); } string errMsg; bool ok= Set(dt, "d:\32.xlsx", out errMsg); } static DataTable GetData(string excelFilePath,bool hasTitle = false) { var app = new Excel.Application(); object oMissiong = System.Reflection.Missing.Value; Excel._Workbook workbook = null; var dt = new DataTable(); try { workbook = app.Workbooks.Open(excelFilePath, oMissiong, oMissiong, oMissiong, oMissiong, oMissiong, oMissiong, oMissiong, oMissiong, oMissiong, oMissiong, oMissiong, oMissiong, oMissiong, oMissiong); var sheets = workbook.Worksheets; //将数据读入到DataTable中 var worksheet = (Excel.Worksheet)sheets.Item[1];//读取第一张表 if (worksheet == null) return null; var iRowCount = worksheet.UsedRange.Rows.Count; var iColCount = worksheet.UsedRange.Columns.Count; //生成列头 for (var i = 0; i < iColCount; i++) { var name = "column" + i; if (hasTitle) { var txt = ((Excel.Range)worksheet.Cells[1, i + 1]).Text.ToString(); if (!string.IsNullOrWhiteSpace(txt)) name = txt; } while (dt.Columns.Contains(name)) name = name + "_1";//重复行名称会报错。 dt.Columns.Add(new DataColumn(name, typeof(string))); } //生成行数据 var rowIdx = hasTitle ? 2 : 1; for (var iRow = rowIdx; iRow <= iRowCount; iRow++) { var dr = dt.NewRow(); for (var iCol = 1; iCol <= iColCount; iCol++) { var range = (Excel.Range)worksheet.Cells[iRow, iCol]; dr[iCol - 1] = (range.Value2 == null) ? "" : range.Text.ToString(); } dt.Rows.Add(dr); } return dt; } catch { return null; } finally { if (workbook != null) { workbook.Close(false, oMissiong, oMissiong); System.Runtime.InteropServices.Marshal.ReleaseComObject(workbook); } app.Workbooks.Close(); app.Quit(); System.Runtime.InteropServices.Marshal.ReleaseComObject(app); } } private static bool Set(DataTable dt, string excelFilePath, out string errMsg ) { Microsoft.Office.Interop.Excel.Application app = null; Microsoft.Office.Interop.Excel._Workbook workbook = null; object oMissiong = System.Reflection.Missing.Value; try { app = new Microsoft.Office.Interop.Excel.Application(); app.DisplayAlerts = false; workbook = app.Workbooks.Add(true); //将数据读入到DataTable中 var worksheet = (Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets.Item[1]; //读取第一张表 if (worksheet == null) { errMsg = "asdg"; return false; } var iRowCount = dt.Rows.Count; var iColCount =dt.Columns.Count; //生成列头 for (var i = 0; i < iColCount; i++) { worksheet.Cells[1, i + 1] = dt.Columns[i].ColumnName; } for (var iRow = 2; iRow <= iRowCount; iRow++) { for (var iCol = 1; iCol <= iColCount; iCol++) { worksheet.Cells[iRow, iCol]=dt.Rows[iRow-2][iCol-1].ToString(); } } errMsg = ""; return true; } catch (Exception ex) { errMsg = ex.Message; return false; } finally { if (workbook != null) { workbook.Close(true, excelFilePath, oMissiong); System.Runtime.InteropServices.Marshal.ReleaseComObject(workbook); } if (app != null) { app.Workbooks.Close(); app.Quit(); System.Runtime.InteropServices.Marshal.ReleaseComObject(app); } } } //void test(string sourceFile) //{ // var app = new Microsoft.Office.Interop.Excel.Application(); // var tp = app.GetType(); // var workBook = app.Workbooks; // var elType = workBook.GetType(); // object objelName = sourceFile; // var ebook = (Microsoft.Office.Interop.Excel.Workbook)elType.InvokeMember("Open", System.Reflection.BindingFlags.InvokeMethod, null, workBook, new Object[] { objelName, true, true }); // Object missing = System.Reflection.Missing.Value; // for (var i = 0; i < ebook.Worksheets.Count; i++) // { // Excel.Worksheet ws = ebook.Worksheets[i + 1]; // ws.PageSetup.Orientation = Excel.XlPageOrientation.xlPortrait;//页面方向竖向 // ws.PageSetup.Zoom = false; // ws.PageSetup.FitToPagesWide = 1; // ws.PageSetup.FitToPagesTall = false; // } // ebook.PrintOut(missing, missing, missing, missing, missing, true, missing, "d:\2.xps"); // tp.InvokeMember("Quit", System.Reflection.BindingFlags.InvokeMethod, null, app, null); // // workBook.Close(); // // app.Quit(); //} } }