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

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM