• 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;
                    }
                }
            }
    

      

  • 相关阅读:
    字符集转换
    基础语法
    python print格式化输出。
    错误:SyntaxError: Missing parentheses in call to 'print'
    delphi 线程教学第一节:初识多线程
    delphi 7 信息对话框的按钮屏蔽键盘操作,只允许鼠标点击
    delphi 7 下安装 indy 10.5.8 教程
    delphi 实现vip126发邮件
    delphi 基础书籍推荐
    delphi 编码速度提升技能
  • 原文地址:https://www.cnblogs.com/baozi789654/p/15659011.html
Copyright © 2020-2023  润新知