欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

WinForm導(dǎo)出文件為Word、Excel、文本文件的方法

 更新時(shí)間:2015年03月06日 09:06:07   投稿:junjie  
這篇文章主要介紹了WinForm導(dǎo)出文件為Word、Excel、文本文件的方法,本文直接給出實(shí)現(xiàn)代碼,代碼中包含相應(yīng)注釋,需要的朋友可以參考下

好久沒有寫文章了,下面把自己最近程序中用到的一個(gè)小小的導(dǎo)出文件的方法給在家分享一下,歡迎大家來排磚,謝謝~不說廢話了,直接上代碼:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;
using Microsoft.Office.Interop.Word;
using System.IO;
using Microsoft.Office.Interop.Excel;
using Sun.Winform.Util;

namespace Sun.Winform.Files
{
  /// <summary>
/// 將內(nèi)容導(dǎo)出為文件類。
/// </summary>
/// <remarks>
/// 作者:SunYujing
/// 日期:2011-12-18
/// </remarks>
  public class ExportFile
  {
    /// <summary>
/// 將字符串存儲(chǔ)為word文檔格式的文件的方法(多線程)。
/// </summary>
/// <param name="strText">要保存的字符串內(nèi)容。</param>
    public static void SaveAsWord(string p_str)
    {
      Thread thread = new Thread(SaveAsWordFile);
      thread.SetApartmentState(ApartmentState.STA);
      thread.Start(p_str);
    }
    /// <summary>
/// 將字符串存儲(chǔ)為txt格式的文件的方法(多線程)。
/// </summary>
/// <param name="p_str"></param>
    public static void SaveAsTxt(string p_str)
    {
      Thread thread = new Thread(SaveAsTxtFile);
      thread.SetApartmentState(ApartmentState.STA);
      thread.Start(p_str);
    }
    /// <summary>
/// 導(dǎo)出數(shù)據(jù)表數(shù)據(jù)到Excel(多線程)。
/// </summary>
    public static void SaveAsExcel(System.Data.DataTable dataTable)
    {
      if (dataTable == null)
      {
        MessageUtil.ShowError("請(qǐng)先指定要導(dǎo)出的數(shù)據(jù)表");
        return;
      }
      Thread thread = new Thread(SaveAsExcelTableFile);
      thread.SetApartmentState(ApartmentState.STA);
      thread.Start(dataTable);
    }
    /// <summary>
/// 導(dǎo)出數(shù)據(jù)集數(shù)據(jù)到Excel(多線程)。
/// </summary>
    public static void SaveAsExcel(System.Data.DataSet dataSet)
    {
      if (dataSet == null)
      {
        MessageUtil.ShowError("請(qǐng)先指定要導(dǎo)出的數(shù)據(jù)集");
        return;
      }
      Thread thread = new Thread(SaveAsExcelSetFile);
      thread.SetApartmentState(ApartmentState.STA);
      thread.Start(dataSet);
    }
    /// <summary>
/// 將字符串存儲(chǔ)為word文檔格式的文件。
/// </summary>
/// <param name="strtext">要保存的字符串內(nèi)容。</param>
    private static void SaveAsWordFile(object strtext)
    {
      SaveFileDialog sfd = new SaveFileDialog();
      sfd.Title = "請(qǐng)選擇文件存放路徑";
      sfd.FileName = "導(dǎo)出數(shù)據(jù)";
      sfd.Filter = "Word文檔(*.doc)|*.doc";
      if (sfd.ShowDialog() != DialogResult.OK)
      {
        return;
      }
      string FileName = sfd.FileName.ToLower();
      if (!FileName.Contains(".doc"))
      {
        FileName += ".doc";
      }
      if (FileName.Substring(FileName.LastIndexOf(Path.DirectorySeparatorChar)).Length <= 5)
      {
        MessageUtil.ShowThreadMessage("文件保存失敗,文件名不能為空!");
        return;
      }
      try
      {
        DateTime start = DateTime.Now;
        MessageUtil.ShowThreadMessage("正在保存文件,請(qǐng)稍候...");
        Microsoft.Office.Interop.Word.ApplicationClass word = new Microsoft.Office.Interop.Word.ApplicationClass();
        Microsoft.Office.Interop.Word._Document doc;
        object nothing = System.Reflection.Missing.Value;
        doc = word.Documents.Add(ref nothing, ref nothing, ref nothing, ref nothing);
        doc.Paragraphs.Last.Range.Text = strtext.ToString();
        object myfileName = FileName;
        //將WordDoc文檔對(duì)象的內(nèi)容保存為doc文檔
        doc.SaveAs(ref myfileName, ref nothing, ref nothing, ref nothing, ref nothing, ref nothing, ref nothing, ref nothing, ref nothing, ref nothing, ref nothing, ref nothing, ref nothing, ref nothing, ref nothing, ref nothing);
        //關(guān)閉WordDoc文檔對(duì)象
        doc.Close(ref nothing, ref nothing, ref nothing);
        //關(guān)閉WordApp組件對(duì)象
        word.Quit(ref nothing, ref nothing, ref nothing);
        GC.Collect();
        DateTime end = DateTime.Now;
        TimeSpan ts = end - start;
        MessageUtil.ShowMessage("文件保存成功,用時(shí)" + ts.ToString());
      }
      catch (System.Exception ex)
      {
        MessageUtil.ShowError(ex.Message);
      }
    }
    /// <summary>
/// 將字符串存儲(chǔ)為txt文檔格式的文件。
/// </summary>
/// <param name="strtext">要保存的字符串內(nèi)容。</param>
    private static void SaveAsTxtFile(object strtext)
    {
      SaveFileDialog sfd = new SaveFileDialog();
      sfd.Title = "請(qǐng)選擇文件存放路徑";
      sfd.FileName = "導(dǎo)出數(shù)據(jù)";
      sfd.Filter = "文本文檔(*.txt)|*.txt";
      if (sfd.ShowDialog() != DialogResult.OK)
      {
        return;
      }
      string FileName = sfd.FileName.ToLower();
      if (!FileName.Contains(".txt"))
      {
        FileName += ".txt";
      }
      if (FileName.Substring(FileName.LastIndexOf(Path.DirectorySeparatorChar)).Length <= 5)
      {
        MessageUtil.ShowThreadMessage("文件保存失敗,文件名不能為空!");
        return;
      }
      try
      {
        DateTime start = DateTime.Now;
        StreamWriter sw = new StreamWriter(FileName, false);
        sw.Write(strtext.ToString());
        sw.Flush();
        sw.Close();
        DateTime end = DateTime.Now;
        TimeSpan ts = end - start;
        MessageUtil.ShowMessage("文件保存成功,用時(shí)" + ts.ToString());
      }
      catch (Exception ex)
      {
        MessageUtil.ShowError(ex.Message);
      }
    }
    /// <summary>
/// 將數(shù)據(jù)存儲(chǔ)為Excel文件。
/// </summary>
/// <param name="p_dt">要保存的數(shù)據(jù)表。</param>
    private static void SaveAsExcelTableFile(object p_dt)
    {
      System.Data.DataTable dt = (System.Data.DataTable)p_dt;
      if (dt.Rows.Count == 0)
      {
        MessageUtil.ShowError("沒有可保存的數(shù)據(jù)");
        return;
      }
      SaveFileDialog sfd = new SaveFileDialog();
      sfd.Title = "請(qǐng)選擇文件存放路徑";
      sfd.FileName = "導(dǎo)出數(shù)據(jù)";
      sfd.Filter = "Excel文檔(*.xls)|*.xls";
      if (sfd.ShowDialog() != DialogResult.OK)
      {
        return;
      }
      string FileName = sfd.FileName.ToLower();
      if (!FileName.Contains(".xls"))
      {
        FileName += ".xls";
      }
      if (FileName.Substring(FileName.LastIndexOf(Path.DirectorySeparatorChar)).Length <= 5)
      {
        MessageUtil.ShowThreadMessage("文件保存失敗,文件名不能為空!");
        return;
      }
      if (sfd.FileName != "")
      {
        Microsoft.Office.Interop.Excel.Application excelApp = new Microsoft.Office.Interop.Excel.Application();
        if (excelApp == null)
        {
          MessageBox.Show("無法創(chuàng)建Excel對(duì)象,可能您的機(jī)器未安裝Excel");
          return;
        }
        else
        {
          MessageUtil.ShowThreadMessage("正在導(dǎo)出數(shù)據(jù),請(qǐng)稍候...");
          DateTime start = DateTime.Now;
          Microsoft.Office.Interop.Excel.Workbooks workbooks = excelApp.Workbooks;
          Microsoft.Office.Interop.Excel.Workbook workbook = workbooks.Add(XlWBATemplate.xlWBATWorksheet);
          Microsoft.Office.Interop.Excel.Worksheet worksheet = (Worksheet)workbook.Worksheets[1];

          for (int col = 1; col <= dt.Columns.Count; col++)
          {
            worksheet.Cells[1, col] = dt.Columns[col - 1].Caption.ToString();
          }
          for (int i = 0; i < dt.Rows.Count; i++)
          {
            for (int j = 0; j < dt.Columns.Count; j++)
            {
              worksheet.Cells[i + 2, j + 1] = dt.Rows[i][j].ToString();
            }
          }
          workbook.Saved = true;
          workbook.SaveCopyAs(sfd.FileName);
          //釋放資源
          System.Runtime.InteropServices.Marshal.ReleaseComObject(worksheet);
          worksheet = null;
          System.Runtime.InteropServices.Marshal.ReleaseComObject(workbook);
          workbook = null;
          workbooks.Close();
          System.Runtime.InteropServices.Marshal.ReleaseComObject(workbooks);
          workbooks = null;
          excelApp.Quit();
          System.Runtime.InteropServices.Marshal.ReleaseComObject(excelApp);
          excelApp = null;
          //使用垃圾回收可以關(guān)閉EXCEL.EXE進(jìn)程
          GC.Collect();
          DateTime end = DateTime.Now;
          int iTimeSpan = (end.Minute - start.Minute) * 60 + (end.Second - start.Second);
          MessageUtil.ShowMessage("數(shù)據(jù)導(dǎo)出完畢,用時(shí)" + iTimeSpan.ToString() + "秒");
        }
      }
    }
    /// <summary>
/// 將數(shù)據(jù)集存儲(chǔ)為Excel文件。
/// </summary>
/// <param name="p_ds">要導(dǎo)出的數(shù)據(jù)集。</param>
    private static void SaveAsExcelSetFile(object p_ds)
    {
      System.Data.DataSet ds = (System.Data.DataSet)p_ds;
      if (ds == null || ds.Tables.Count == 0)
      {
        MessageUtil.ShowError("沒有可保存的數(shù)據(jù)");
        return;
      }
      SaveFileDialog sfd = new SaveFileDialog();
      sfd.Title = "請(qǐng)選擇文件存放路徑";
      sfd.FileName = "導(dǎo)出數(shù)據(jù)";
      sfd.Filter = "Excel文檔(*.xls)|*.xls";
      if (sfd.ShowDialog() != DialogResult.OK)
      {
        return;
      }
      string FileName = sfd.FileName.ToLower();
      if (!FileName.Contains(".xls"))
      {
        FileName += ".xls";
      }
      if (FileName.Substring(FileName.LastIndexOf(Path.DirectorySeparatorChar)).Length <= 5)
      {
        MessageUtil.ShowThreadMessage("文件保存失敗,文件名不能為空!");
        return;
      }
      if (sfd.FileName != "")
      {
        Microsoft.Office.Interop.Excel.Application excelApp = new Microsoft.Office.Interop.Excel.Application();
        if (excelApp == null)
        {
          MessageBox.Show("無法創(chuàng)建Excel對(duì)象,可能您的機(jī)器未安裝Excel");
          return;
        }
        else
        {
          MessageUtil.ShowThreadMessage("正在導(dǎo)出數(shù)據(jù),請(qǐng)稍候...");
          DateTime start = DateTime.Now;
          Microsoft.Office.Interop.Excel.Workbooks workbooks = excelApp.Workbooks;
          Microsoft.Office.Interop.Excel.Workbook workbook = workbooks.Add(XlWBATemplate.xlWBATWorksheet);
          Microsoft.Office.Interop.Excel.Worksheet worksheet = null;
          object objMissing = System.Reflection.Missing.Value;
          for (int m = 0; m < ds.Tables.Count; m++)
          {
            System.Data.DataTable dt = ds.Tables[m];
            worksheet = (Worksheet)workbook.ActiveSheet;
            worksheet.Name = dt.TableName;
            for (int col = 1; col <= dt.Columns.Count; col++)
            {
              worksheet.Cells[1, col] = dt.Columns[col - 1].Caption.ToString();
            }
            for (int i = 1; i <= dt.Rows.Count; i++)
            {
              for (int j = 1; j <= dt.Columns.Count; j++)
              {
                worksheet.Cells[i + 1, j] = dt.Rows[i - 1][j - 1].ToString();
              }
            }
            if (m < ds.Tables.Count - 1)
            {
              workbook.Sheets.Add(objMissing, objMissing, 1, XlSheetType.xlWorksheet);
            }
          }
          workbook.Saved = true;
          workbook.SaveCopyAs(sfd.FileName);
          //釋放資源
          System.Runtime.InteropServices.Marshal.ReleaseComObject(worksheet);
          worksheet = null;
          System.Runtime.InteropServices.Marshal.ReleaseComObject(workbook);
          workbook = null;
          workbooks.Close();
          System.Runtime.InteropServices.Marshal.ReleaseComObject(workbooks);
          workbooks = null;
          excelApp.Quit();
          System.Runtime.InteropServices.Marshal.ReleaseComObject(excelApp);
          excelApp = null;
          GC.Collect();
          DateTime end = DateTime.Now;
          int iTimeSapn = (end.Minute - start.Minute) * 60 + (end.Second - start.Second);
          MessageUtil.ShowMessage("數(shù)據(jù)導(dǎo)出完畢,用時(shí)" + (iTimeSapn / 60).ToString() + "分" + (iTimeSapn % 60).ToString() + "秒");
        }
      }
    }
  }
}

相關(guān)文章

  • .NET使用IResourceMonitor實(shí)現(xiàn)獲取資源信息

    .NET使用IResourceMonitor實(shí)現(xiàn)獲取資源信息

    在 Microsoft.Extensions.Diagnostics.ResourceMonitoring 包提供了一系列定制 API,專用于監(jiān)視 .NET 應(yīng)用程序的資源利用率,本文將利用IResourceMonitor來實(shí)現(xiàn)獲取資源狀態(tài)信息,感興趣的可以了解下
    2024-01-01
  • unity通過Mesh網(wǎng)格繪制圖形球體

    unity通過Mesh網(wǎng)格繪制圖形球體

    這篇文章主要為大家詳細(xì)介紹了unity通過Mesh網(wǎng)格繪制圖形球體,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • C#開發(fā)之微信小程序發(fā)送模板消息功能

    C#開發(fā)之微信小程序發(fā)送模板消息功能

    這篇文章主要介紹了C#開發(fā)之微信小程序發(fā)送模板消息功能,需要的朋友可以參考下
    2017-09-09
  • visio二次開發(fā)--判斷文檔是否已發(fā)生變化(變化就加星號(hào)*)

    visio二次開發(fā)--判斷文檔是否已發(fā)生變化(變化就加星號(hào)*)

    最近做一個(gè)故障樹診斷的項(xiàng)目,用visio二次開發(fā),可以同時(shí)打開多個(gè)繪制的故障樹圖形文檔。項(xiàng)目中需要實(shí)現(xiàn)判斷文檔是否發(fā)生變化,這是很多編輯軟件的基本功能,變化了就加個(gè)星號(hào)*
    2013-04-04
  • WPF的ListView控件自定義布局用法實(shí)例

    WPF的ListView控件自定義布局用法實(shí)例

    這篇文章主要介紹了WPF的ListView控件自定義布局的方法,結(jié)合實(shí)例形式分析了WPF中ListView控件的布局方法,需要的朋友可以參考下
    2016-07-07
  • C# 通過ServiceStack 操作Redis

    C# 通過ServiceStack 操作Redis

    這篇文章主要介紹了C# 通過ServiceStack 操作Redis的示例,幫助大家更好的理解和學(xué)習(xí)使用c#,感興趣的朋友可以了解下
    2021-03-03
  • C#中DataTable的創(chuàng)建與遍歷實(shí)現(xiàn)

    C#中DataTable的創(chuàng)建與遍歷實(shí)現(xiàn)

    這篇文章主要介紹了C#中DataTable的創(chuàng)建與遍歷實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • C#實(shí)現(xiàn)貝塞爾曲線的方法

    C#實(shí)現(xiàn)貝塞爾曲線的方法

    這篇文章主要為大家詳細(xì)介紹了C#實(shí)現(xiàn)貝塞爾曲線的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • WindowsForm實(shí)現(xiàn)警告消息框的實(shí)例代碼

    WindowsForm實(shí)現(xiàn)警告消息框的實(shí)例代碼

    這篇文章主要介紹了WindowsForm如何實(shí)現(xiàn)警告消息框,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • C#實(shí)現(xiàn)文件篩選讀取并翻譯的自動(dòng)化工具

    C#實(shí)現(xiàn)文件篩選讀取并翻譯的自動(dòng)化工具

    這篇文章主要為大家詳細(xì)介紹了如何利用C#實(shí)現(xiàn)文件篩選及讀取內(nèi)容,并翻譯的自動(dòng)化工具,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下
    2023-03-03

最新評(píng)論