using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Reflection;
using System.Runtime.InteropServices;

namespace DealWithHtml
{
    public partial class Excel另存为 : Form
    {
        public Excel另存为()
        {
            InitializeComponent();
        }

private void button1_Click(object sender, EventArgs e)
        {
            //this.textBox1.Text = "";
            FolderBrowserDialog openFileDialog = new FolderBrowserDialog();

if (openFileDialog.ShowDialog() == DialogResult.OK)
            {
                this.textBox1.Text = openFileDialog.SelectedPath;
            }
            else
            {
                return;
            }

DirectoryInfo dir = new DirectoryInfo(this.textBox1.Text.Trim());
            FileInfo[] files = GetFiles(); //dir.GetFiles("*.xls"); //GetFiles();
            if (files == null || files.Length == 0) return;

string file = openFileDialog.SelectedPath + "\\另存为文件夹";
            if (Directory.Exists(file))
            {
                MessageBox.Show("你已经另存为过了,若想再另存为,请先移动或删除此文件夹!");
                return;
            }

//File.Create(file);
            Directory.CreateDirectory(file);

object missing = Missing.Value;
            Microsoft.Office.Interop.Excel.Application appExcel = null;//实例Excel类
            appExcel = new Microsoft.Office.Interop.Excel.Application();
            Microsoft.Office.Interop.Excel.Workbook workbook = null;
            try
            {
                foreach (FileInfo info in files)
                {
                    workbook = null;
                    appExcel.DisplayAlerts = false;//DisplayAlerts 属性设置成 False,就不会出现这种警告。                
                    workbook = appExcel.Workbooks.Open(info.FullName,
                        Type.Missing, Type.Missing, Type.Missing, Type.Missing,
                        Type.Missing, Type.Missing, Type.Missing, Type.Missing,
                        Type.Missing, Type.Missing, Type.Missing, Type.Missing,
                        Type.Missing, Type.Missing);//打开Excel

string name = info.Name.Substring(0, info.Name.LastIndexOf('.')); // info.Name + "_SaveAs";
                    name = file + "\\" + name + "_SaveAs" + (info.Extension == ".xml" ? ".xls" : info.Extension);
                    workbook.SaveAs(name, Microsoft.Office.Interop.Excel.XlFileFormat.xlWorkbookNormal, missing, missing, missing, missing,
                        Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlExclusive
                        , missing, missing, missing, missing, missing);
                }
                MessageBox.Show("另存为完成!");
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            finally
            {
                Kill(appExcel);
            }
        }

[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)
        {
            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 
            GC.Collect();
        }

private FileInfo[] GetFiles()
        {
            List<FileInfo> list = new List<FileInfo>();
            DirectoryInfo dir = new DirectoryInfo(this.textBox1.Text.Trim());
            FileInfo[] files1 = dir.GetFiles("*.xls");
            FileInfo[] files2 = dir.GetFiles("*.xml");
            list.AddRange(files1.ToList());
            list.AddRange(files2.ToList());

return list.ToArray();
        }
    }

}

Excel另存为_有些Excel打开时会出现一些提示的更多相关文章

  1. 将Excel另存为CSV格式文件

    直接将Excel另存为CSV,速度很快: $CurrentPath = $MyInvocation.MyCommand.Path.substring(0,$MyInvocation.MyCommand ...

  2. C#_简单Excel导入

    引用程序集 Microsoft.Office.Core Microsoft.Office.Interop.Excel using System; using System.Collections.Ge ...

  3. [计算机故障处理]EXCEL文件双击不能直接打开

    同事的电脑里的EXCEL文件不知什么原因双击不能直接打开了,双击只能打开软件而且是没有任何表格的,但通过软件中的“打开”再找到指定的文件能打开. 解决方案: 打开excel,依次选择:工具-选项-常规 ...

  4. Python: 如何判断远程服务器上Excel文件是否被人打开

    最近工作中需要去判断远程服务器上的某个Excel文件是否被打开,如果被人打开,则等待,如果没人打开使用,则去填写数据进Excel文件. 开始想的很简单,和其他语言一样,比如C#,打开文件,如果报错说明 ...

  5. Java 通过Xml导出Excel文件,Java Excel 导出工具类,Java导出Excel工具类

    Java 通过Xml导出Excel文件,Java Excel 导出工具类,Java导出Excel工具类 ============================== ©Copyright 蕃薯耀 20 ...

  6. 办公软件-Excel:Microsoft Office Excel 2003百科

    ylbtech-办公软件-Excel:Microsoft Office Excel 2003百科 Microsoft® Office Excel 2003 是一种电子表格程序,可提供对于 XML 的支 ...

  7. 浅谈Excel开发:九 Excel 开发中遇到的常见问题及解决方法

    Excel开发过程中有时候会遇到各种奇怪的问题,下面就列出一些本人在开发中遇到的一些比较典型的问题,并给出了解决方法,希望对大家有所帮助. 一 插件调试不了以及错误导致崩溃的问题 在开发机器上,有时可 ...

  8. 浅谈Excel开发:三 Excel 对象模型

    前一篇文章介绍了Excel中的菜单系统,在创建完菜单和工具栏之后,就要着手进行功能的开发了.不论您采用何种方式来开发Excel应用程序,了解Excel对象模型尤其重要,这些对象是您与Excel进行交互 ...

  9. ASP.NET Core 2.2 : 十六.扒一扒新的Endpoint路由方案 try.dot.net 的正确使用姿势 .Net NPOI 根据excel模板导出excel、直接生成excel .Net NPOI 上传excel文件、提交后台获取excel里的数据

    ASP.NET Core 2.2 : 十六.扒一扒新的Endpoint路由方案   ASP.NET Core 从2.2版本开始,采用了一个新的名为Endpoint的路由方案,与原来的方案在使用上差别不 ...

随机推荐

  1. Communications link failure,The last packet successfully received from the server was *** millisecon

    使用Connector/J连接MySQL数据库,程序运行较长时间后就会报以下错误: Communications link failure,The last packet successfully r ...

  2. 在IIS上搭建FTP服务

    FTP服务 FTP是文件传输协议(File Transfer Protocol)的简称,该协议属于应用层协议(端口号通常为21),用于Internet上的双向文件传输(即文件的上传和下载).在网络上有 ...

  3. Spring Cloud feign 服务超时处理

    Spring Cloud中,Feign和Ribbon在整合了Hystrix后,可能会出现首次调用失败的问题 造成该问题的原因 Hystrix默认的超时时间是1秒,如果超过这个时间尚未响应,将会进入fa ...

  4. servlet运作机制

    最近研究zipkin,在研究客户端brave的时候,才算开始理解servlet了.    servlet只是tomcat被实例化一次:    之后每次访问其实都是对同一个servlet示例操作:所以, ...

  5. Micro-PaaS(Docker+K8S)

    1.概述 Docker是一种Linux容器工具集,它是为构建(Build).交付(Ship)和运行(Run)分布式应用而设计的. Kubernates:是开源的容器集群管理系统.它构建在Docker技 ...

  6. 原 win10 msys2 vs2015 ffmpeg3.2.2 编译

    01 环境 win10x64企业版.vs2015update3企业版.git(git version 2.10.0.windows.1). 02 下载ffmpeg代码 git clone https: ...

  7. idea 注册码 地址:

    http://idea.lanyus.com IntelliJ IDEA 注册码 *.lanyus.com及*.qinxi1992.cn下的全部授权服务器已遭JetBrains封杀 请搭建自己的Int ...

  8. 基于python的测试框架behave----context

    使用behave时,每一步对应的方法都需要参数context,那么context是什么,为什么都需要传这个对象? 在所有用例中的context都是behave.runner.Context类的一个实例 ...

  9. socket编程之select()

    int select(int maxfdp,fd_set *readfds,fd_set *writefds,fd_set *errorfds,struct timeval *timeout); 参数 ...

  10. Ajax的基础应用

    什么是ajax Ajax: asynchronous  javascript  and  xml (异步js和xml) 其是可以与服务器进行(异步/同步)交互的技术之一. ajax的语言载体是java ...