C#删除Excel的列

1,添加引用Microsoft.Office.Interop.Excel.dll

2, using MSExcel = Microsoft.Office.Interop.Excel;

3,应用案例

        /// <summary>
        /// 打开atlas的另存数据,删除不需要显示的数据
        /// </summary>
        /// <param name="filePath">atlas另存数据</param>
        public static void Step5(FilePath filePath)
        {
            //【1】打开excel文件的第几张表,第几行的数据,返回一个字典{列名:列的索引}
            //字典的作用:可以根据列名快速找到对应的列索引
            Dictionary<string, int> dicData = ExcelHelper.GetDataDictionary(filePath.AtlasDataBackUpFileName, 1, 1);

            Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application();
            MSExcel.Workbook workbook = excel.Application.Workbooks.Open(filePath.AtlasDataBackUpFileName);
            MSExcel.Worksheet worksheet = workbook.Worksheets[1];

            
            try
            {
                //删除不需要的列
                int deleteNumber = 0;
                foreach (string columnName in RemoveColumnNames.RemoveList)
                {
                    ((MSExcel.Range)worksheet.Cells[System.Reflection.Missing.Value,
                        dicData[columnName] + 1 - deleteNumber]).Select();
                    ((MSExcel.Range)worksheet.Cells[System.Reflection.Missing.Value,
                        dicData[columnName] + 1 - deleteNumber]).EntireColumn.Delete();
                    deleteNumber++;
                }

                //给单元格赋值
                worksheet.get_Range("B1", "B1").Value = "机型码";
                worksheet.get_Range("C1", "C1").Value = "作业员";
                worksheet.get_Range("D1", "D1").Value = "工位";

                //【注意】通过行列索引给单元格赋值,索引是从1开始的,不是从0开是的。下面设置从0开始的就报错
                //worksheet.Cells[0,1].Value = "测试";
                //worksheet.Cells[1, 0].Value = "测试";

                //设置Format属性,保留1位小数。【设置所有的列,太费时间了,不建议用】
                //worksheet.get_Range("G1", "G65535").NumberFormat = "0.0";
                //worksheet.get_Range("H1", "H65535").NumberFormat = "0.0";

                //获取已用的范围数据
                int rowsCount = worksheet.UsedRange.Rows.Count;
                int colsCount = worksheet.UsedRange.Columns.Count;
                //设置Format属性,保留1位小数
                worksheet.get_Range("G2", "G"+ rowsCount).NumberFormat = "0.0";
                worksheet.get_Range("H2", "H"+ rowsCount).NumberFormat = "0.0";

                #region 设置打印页按比例缩放,将所有列打印在一页,都没效果,建议直接用NPOI的打印缩放

                //worksheet.PageSetup.Orientation = MSExcel.XlPageOrientation.xlPortrait;
                //打印时页面设置,必须设置为false,下面的二行页高,页宽才有效
                //worksheet.PageSetup.Zoom = false;
                //设置打印列宽为1页
                //worksheet.PageSetup.FitToPagesWide = 1;//【不稳定,有时候会把所有列设置为1页】
                //worksheet.PageSetup.FitToPagesTall = 0;

                //worksheet.PageSetup.CenterHorizontally = true;

                //worksheet.PageSetup.Zoom = false;
                //worksheet.PageSetup.Zoom = 75;

                //worksheet.PageSetup.Zoom = 75;//打印时页面设置,缩放比例 
                //worksheet.PageSetup.TopMargin = 0; //上边距为0 
                //worksheet.PageSetup.BottomMargin = 0; //下边距为0 
                //worksheet.PageSetup.LeftMargin = 0; //左边距为0 
                //worksheet.PageSetup.RightMargin = 0; //右边距为0 

                #endregion

                workbook.Save();
            }
            catch (Exception exception)
            {
                MessageBox.Show(exception.Message,"删除列或设置值出错");
            }
            finally
            {
                System.Runtime.InteropServices.Marshal.ReleaseComObject(workbook);
                System.Runtime.InteropServices.Marshal.ReleaseComObject(worksheet);
                excel.Quit();
                GC.Collect();
                KeyMyExcelProcess.Kill(excel);
            }
        }

  

4,关闭Excel进程

        /// <summary>
        /// 关闭Excel进程
        /// </summary>
        public class KeyMyExcelProcess
        {
            [DllImport("User32.dll", CharSet = CharSet.Auto)]
            public static extern int GetWindowThreadProcessId(IntPtr hwnd, out int ID);
            public static void Kill(Microsoft.Office.Interop.Excel.Application excel)
            {
                try
                {
                    IntPtr t = new IntPtr(excel.Hwnd);   //得到这个句柄,具体作用是得到这块内存入口
                    int k = 0;
                    GetWindowThreadProcessId(t, out k);   //得到本进程唯一标志k
                    System.Diagnostics.Process p = System.Diagnostics.Process.GetProcessById(k);   //得到对进程k的引用
                    p.Kill();     //关闭进程k
                }
                catch (System.Exception ex)
                {
                    throw ex;
                }
            }
        }

  

原文地址:https://www.cnblogs.com/baozi789654/p/15659011.html