c#读写excel

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();

        //}

    }
}

 

posted @ 2020-04-19 19:28  灰主流  阅读(363)  评论(0编辑  收藏  举报