新建并保存一个空的Excel

测试用的

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 Application = Microsoft.Office.Interop.Excel.Application;
using Microsoft.Office.Interop.Excel;
using System.IO;
using System.Reflection;
using System.Diagnostics;
using System.Runtime.InteropServices;

namespace ExcelTest
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        string fileName;
        Workbook workbook;
        object missing = Missing.Value;
        Application app;

        private void button1_Click(object sender, EventArgs e)
        {
            try
            {
                app = new Application()
                {
                    Visible = false
                };
                workbook = app.Workbooks.Add();
                fileName = System.Windows.Forms.Application.StartupPath + "\\excel.xlsx";
                SaveAsFile();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        public void SaveAsFile()
        {
            if (string.IsNullOrEmpty(fileName))
            {
                throw new Exception("没有指定输出文件路径!");
            }

            XlFileFormat fileFormat;
            if (String.Compare(Path.GetExtension(fileName).ToLower(), ".xlsx", false) == 0)
            {
                fileFormat = XlFileFormat.xlWorkbookDefault; //Excel 2007版本
            }
            else
            {
                fileFormat = XlFileFormat.xlAddIn8;//Excel 2003版本
            }

            try
            {
                //workbook.Save();
                workbook.SaveAs(fileName, fileFormat, missing, missing, missing, missing, XlSaveAsAccessMode.xlExclusive, missing, missing, missing, missing, missing);
            }
            catch (Exception ex)
            {
               // ExceptionLog.Instance.WriteLog(ex, LogType.UI);
                throw;
            }
            finally
            {
                Dispose();
            }
        }

        private void Dispose()
        {
            int appHwnd = 0;
            try
            {
                if (workbook != null)
                {
                    workbook.Close(true, missing, missing);
                    System.Runtime.InteropServices.Marshal.ReleaseComObject(workbook);
                    workbook = null;
                }
                if (app != null)
                {
                    appHwnd = app.Hwnd;
                    app.Workbooks.Close();
                    app.Quit();
                    System.Runtime.InteropServices.Marshal.ReleaseComObject(app);
                    app = null;
                }
            }
            catch (Exception ex)
            {
                //ExceptionLog.Instance.WriteLog(ex, LogType.UI);
                throw ex;
            }
            GC.Collect();
            if (appHwnd > 0)
            {
                KillExcelProcess(appHwnd);
            }
        }

        [DllImport("User32.dll", CharSet = CharSet.Auto)]
        private static extern int GetWindowThreadProcessId(IntPtr hwnd, out int ID);
        private static void KillExcelProcess(int appHwnd)
        {
            Process[] ps = Process.GetProcesses();
            IntPtr t = new IntPtr(appHwnd); //得到这个句柄,具体作用是得到这块内存入口
            int ExcelID = 0;
            GetWindowThreadProcessId(t, out ExcelID); //得到本进程唯一标志
            foreach (Process p in ps)
            {
                if (p.ProcessName.ToLower().Equals("excel"))
                {
                    if (p.Id == ExcelID)
                    {
                        p.Kill();
                    }
                }
            }
        }
    }
}
时间: 2024-10-21 05:43:36

新建并保存一个空的Excel的相关文章

Android问题-打开DelphiXE8与DelphiXE10新建一个空工程提示"out of memory"

错误信息: [DCC Error] E2597 d:\XE8\Embarcadero\Studio\16.0\PlatformSDKs\android-ndk-r9c\toolchains\arm-linux-androideabi-4.6\prebuilt\windows\bin\arm-linux-androideabi-ld.exe: out of memory 问题现象:之前的工程可以编译的,今天打开突然不行了.新建一个空的工程也不行. 问题原因:可能Delphi编译需要大量的内存吧,电

php的源代码包构建一个空的php扩展。

下载一个php的源代码包,这里使用的是php 4.0.5版,解压后会看到php的根目录下会有README.EXT_SKEL这样一个文件,打开详细阅读了一下,发现了一个非常好用的工具,这个工具可以帮你构建一个空的php扩展,然后你向里面添加相应的代码就可以完成你自己的功能扩展了. 首先转移你的目录到php的目录下的ext目录,如果你只需要一个基本的扩展框架的话,执行下面的命令: ./ext_skel --extname=module_name module_name是你自己可以选择的扩展模块的名字

刨根问底U3D---从一个空类说起

这篇文章包含哪些内容 这篇文章从一个Empty的MonoBehaviour入手,首先讨论一下C#的修饰符internal,default,virtual,sealed 接着讨论一下MonoBehaviour,Component,Tranform,GameObject之间的关系 及脚本之间的如何互相关联 从一个空类说起 using UnityEngine; using System.Collections; public class EmptyClass : MonoBehaviour { //

Office 2016 - 下载、安装、激活后,右键新建菜单中,出现 Micorosoft Excel 97-2003 工作表,而不是 Micorosoft Excel 工作表、以及对新建菜单项位置做调整

安装激活 Office 2016 后,新建菜单项如下: 首先,需要做的是把右键新建菜单项中的 Micorosoft Excel 09-2003 工作表去除(保存格式是 .xls),替换为 Micorosoft Excel 工作表(Excel 2016 的默认格式 .xlsx) 其次,对新建菜单项的排列顺序做调整,额,把 Micorosoft Excel 工作表 移至 Micorosoft Word 文档下面. 调整后样式:

Java Serializable:明明就一个空的接口嘛

对于 Java 的序列化,我一直停留在最浅显的认知上——把那个要序列化的类实现 Serializbale 接口就可以了.我不愿意做更深入的研究,因为会用就行了嘛. 但随着时间的推移,见到 Serializbale 的次数越来越多,我便对它产生了浓厚的兴趣.是时候花点时间研究研究了. 01.先来点理论 Java 序列化是 JDK 1.1 时引入的一组开创性的特性,用于将 Java 对象转换为字节数组,便于存储或传输.此后,仍然可以将字节数组转换回 Java 对象原有的状态. 序列化的思想是“冻结”

php 中如何创建一个空对象

// 创建一个空对象 $obj=(object)array(); //假设这是从数据库取内容 $arr=["prod_id"=>103,"prod_name"=>"黑客技术从入门到入狱"]; // 遍历数组,并且填充进对象中 foreach($arr as $k=>$v) $obj->$k=$v;

log4j实现每个线程保存一个日志文件

log4j.properties: ### direct log messages to stdout ### log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.Target=System.out log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.Conversion

我的视频网站开通,第一个 ArcGIS文本文件,excel文件生成点操作发布,希望大家支持

网站地址:http://i.youku.com/gisoracle第一个学习视屏:ArcGIS文本文件,excel文件生成点操作http://v.youku.com/v_show/id_XNzM3NzIxODE2.html 我的视频网站开通,第一个 ArcGIS文本文件,excel文件生成点操作发布,希望大家支持,布布扣,bubuko.com

Linux下使用vi新建文件保存文件时遇到错误:E212: Can't open file for writing

出现E212: Can't open file for writing的问题是由于权限问题导致的,解决方法有以下思路: 1.使用root进行登录,然后再操作. 2.在使用命令时,前面加sudo. 3.如果是多级文件夹的文件时,由于这个文件夹没有创建,所以要先创建这个文件夹,再来操作这个文件. Linux下使用vi新建文件保存文件时遇到错误:E212: Can't open file for writing