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

浙公网安备 33010602011771号