導出Excel方法

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.OleDb;
using System.Windows.Forms;
using System.Data;
using System.Runtime.InteropServices;

namespace WmsClient
{
    public class Excel
    {
        public static void SaveAsExcel(DataTable dtExcel)
        {
            SaveFileDialog saveFileDialog = new SaveFileDialog();
            saveFileDialog.Filter = "导出Excel (*.xls)|*.xls";
            saveFileDialog.FilterIndex = 0;
            saveFileDialog.RestoreDirectory = true;
            saveFileDialog.CreatePrompt = true;
            saveFileDialog.Title = "导出文件保存路径";
            saveFileDialog.ShowDialog();
            string strName = saveFileDialog.FileName;
            if (strName.Length != 0)
            {
                //导出到execl
                System.Reflection.Missing miss = System.Reflection.Missing.Value;
                Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application();
                try
                {
                    excel.Application.Workbooks.Add(true);
                    excel.Visible = false;//若是true,则在导出的时候会显示EXcel界面。
                    if (excel == null)
                    {
                        MessageBox.Show("EXCEL无法启动!", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        return;
                    }
                    Microsoft.Office.Interop.Excel.Workbooks books = (Microsoft.Office.Interop.Excel.Workbooks)excel.Workbooks;
                    Microsoft.Office.Interop.Excel.Workbook book = (Microsoft.Office.Interop.Excel.Workbook)(books.Add(miss));
                    Microsoft.Office.Interop.Excel.Worksheet sheet = (Microsoft.Office.Interop.Excel.Worksheet)book.ActiveSheet;
                    sheet.Name = "test";

                    int m = 0, n = 0;
                    //生成列名称   这里i是从1开始的 因为我第0列是个隐藏列ID  没必要写进去
                    for (int i = 0; i < dtExcel.Columns.Count; i++)
                    {
                        excel.Cells[1, i + 1] = dtExcel.Columns[i].Caption.ToString();
                    }

                    //填充数据
                    for (int i = 0; i < dtExcel.Rows.Count; i++)
                    {
                        //j也是从1开始  原因如上  每个人需求不一样
                        for (int j = 0; j < dtExcel.Columns.Count; j++)
                        {
                            if (dtExcel.Rows[i][j].ToString().GetType() == typeof(string))
                            {
                                excel.Cells[i + 2, j + 1] = "‘" + dtExcel.Rows[i][j].ToString().Trim();
                            }
                            else
                            {
                                excel.Cells[i + 2, j + 1] = dtExcel.Rows[i][j].ToString().Trim();
                            }
                        }
                    }

                    sheet.SaveAs(strName, miss, miss, miss, miss, miss, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange, miss, miss, miss);
                    book.Close(false, miss, miss);
                    books.Close();
                    excel.Quit();
                    System.Runtime.InteropServices.Marshal.ReleaseComObject(sheet);
                    System.Runtime.InteropServices.Marshal.ReleaseComObject(book);
                    System.Runtime.InteropServices.Marshal.ReleaseComObject(books);
                    System.Runtime.InteropServices.Marshal.ReleaseComObject(excel);

                    GC.Collect();
                    MessageBox.Show("数据已经成功导出!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    //toolStripProgressBar1.Value = 0;
                    System.Diagnostics.Process.Start(strName);
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message, "错误提示");
                }
                finally
                {
                    KillSpecialExcel(excel);
                }
            }
        }

        private static void KillSpecialExcel(Microsoft.Office.Interop.Excel.Application m_objExcel)
        {
            try
            {
                if (m_objExcel != null)
                {
                    int lpdwProcessId;
                    GetWindowThreadProcessId(new IntPtr(m_objExcel.Hwnd), out lpdwProcessId);
                    System.Diagnostics.Process.GetProcessById(lpdwProcessId).Kill();
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("Delete Excel Process Error:" + ex.Message);
            }
        }

        [DllImport("User32.dll", CharSet = CharSet.Auto)]
        static extern int GetWindowThreadProcessId(IntPtr hWnd, out int lpdwProcessId);

    }
}
时间: 2024-12-21 18:56:41

導出Excel方法的相关文章

GridView導出Excel

1.aspx頁面需要添加:EnableEventValidation="false" 實例:<%@ Page Language="C#" AutoEventWireup="true" EnableEventValidation="false"  CodeFile="DefCheckDate.aspx.cs"    Inherits="WebAdmin_CustomRegister_Short

table導出excel | 後臺

第一種也是比較好的方法: String str=afwtHtml; FileWriter writer; try { writer = new FileWriter("D:\\logs\\nihao2.xls"); writer.write(str); writer.flush(); writer.close(); } catch (IOException e) { e.printStackTrace(); } return "ExportFinished"; 第二

C#根據當前DataGridView查詢數據導出Excel

private void btnsuggestinfo_Click(object sender, EventArgs e) { DataTable dt = new DataTable(); dt.Columns.Add("單號", typeof(string)); dt.Columns.Add("項次", typeof(decimal)); dt.Columns.Add("項次預約數量", typeof(decimal)); dt.Column

導出到Excel

void clicked(){ #Excel HWND HWND; SysExcelApplication excel; SysExcelWorkbooks books; SysExcelWorkbook book; SysExcelWorksheets sheets; SysExcelWorksheet sheet; SysExcelRange columns; SysExcelRange column; SysExcelCells cells; SysExcelCell cell; SysE

Saiku更改導出文件的文件名(十九)

Saiku更改導出文件的文件名 Saiku查询完数据之后,可以以excel,pdf,csv等格式将数据导出,这里我们来讲一下怎么更改导出的文件名. 找到对应的导出方法所在的js文件: saiku-server\tomcat\webapps\ROOT\js\saiku\views\WorkspaceToolbar.js 这里分别有三个方法导出不同形式的文件: export_xls export_csv export_pdf 我们主要更改里面的filename即可啦! 可以自定义filename,我

在ASP.NET Core中使用EPPlus导入出Excel文件

原文:在ASP.NET Core中使用EPPlus导入出Excel文件 这篇文章说明了如何使用EPPlus在ASP.NET Core中导入和导出.xls/.xlsx文件(Excel).在考虑使用.NET处理excel时,我们总是寻找第三方库或组件.使用Open Office Xml格式(xlsx)读取和写入Excel 2007/2010文件的最流行的.net库之一是EPPlus.这个库现在已经支持.NET Core许久了.这适用于Windows,Linux和Mac. 因此,让我们创建一个新的AS

linux + eclipse + cdt 报错undefined reference......好麻烦的,这位大牛给出的方法可行,特此MARK!!!!

http://bbs.csdn.net/topics/390239632 kerosun kerosun 等级: 结帖率:96.92% 楼主 发表于: 2012-10-11 12:00:51 比如有一个tools工程,提供给其他工程通用的工具函数. 我现在的做法就只能是ctrl+c|ctrl+v一旦工具函数发生变化,还需要在用到这些函数的工程中更新,比较麻烦. 看到eclipse工程属性设置中有Project References,但是一直不会用.那位好心人能说说怎样实现我的需求. 更多0分享到

C# Datatable导出Excel方法

C# 导出Excel方法  先引用下System.IO;System.data; 具体函数如下: 1 public static bool ExportCSV(DataTable dt, string fileNmae) 2 { 3 bool Msg = false; 4 string con = ""; 5 foreach (DataColumn dc in dt.Columns) 6 { 7 con += dc.ColumnName + ","; 8 } 9 c

JavaScript弹出窗口方法

本文实例汇总了常用的JavaScript弹出窗口方法,供大家对比参考,希望能对大家有所帮助.详细方法如下: 1.无提示刷新网页: 大家有没有发现,有些网页,刷新的时候,会弹出一个提示窗口,点"确定"才会刷新.而有的页面不会提示,不弹出提示窗口,直接就刷新了.如果页面没有form,则不会弹出提示窗口如果页面有form表单,a)<form  method="post" ...>    会弹出提示窗口b)<form  method="get&q