Chào mừng đến với Diễn đàn lập trình - Cộng đồng lập trình.
Trang 1 của 4 123 ... CuốiCuối
Kết quả 1 đến 10 của 33
  1. #1
    Ngày tham gia
    Sep 2015
    Bài viết
    0

    Export datatable to Excel with Format in C#

    Chào các bạn ! Sau khi nghiên cứu xong bài viết của anh ZCoder87 tại: Exports dữ liệu ra excel trong lập trình C#
    và một số trang web nước ngoài mình đã tự viêt class này để phục vụ cho việc trích xuất dữ liệu Datatable ra file Excel với tên cột Excel lấy từ tên các trường trong Table đó và Có thể thêm Tiêu đề cho file

    Trong bài viết của mình các khái niệm sẽ không giải thích lại nữa ! Bạn nào chưa hiểu có thể đọc lại bài viết trên của anh ZCoder


    Mã:
    using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Data;using System.Data.SqlClient;using Excel = Microsoft.Office.Interop.Excel;using CrystalDecisions.CrystalReports.Engine;using CrystalDecisions.Shared;using System.Windows.Forms;using System.IO; namespace WCFDbService {    public class ReportDB    {         static public bool exportDataToExcel(string tieude, DataTable dt)        {            bool result = false;            //khoi tao cac doi tuong Com Excel de lam viec            Excel.ApplicationClass xlApp;            Excel.Worksheet xlSheet;            Excel.Workbook xlBook;            //doi tuong Trống để thêm  vào xlApp sau đó lưu lại sau            object missValue = System.Reflection.Missing.Value;            //khoi tao doi tuong Com Excel moi            xlApp = new Excel.ApplicationClass();            xlBook = xlApp.Workbooks.Add(missValue);            //su dung Sheet dau tien de thao tac            xlSheet = (Excel.Worksheet)xlBook.Worksheets.get_Item(1);            //không cho hiện ứng dụng Excel lên để tránh gây đơ máy            xlApp.Visible = false;            int socot=dt.Columns.Count;            int sohang=dt.Rows.Count;            int i,j;             SaveFileDialog f = new SaveFileDialog();            f.Filter = "Excel file (*.xls)|*.xls";            if (f.ShowDialog() == DialogResult.OK)            {                  //set thuoc tinh cho tieu de                xlSheet.get_Range("A1", Convert.ToChar(socot + 65) + "1").Merge(false);                Excel.Range caption = xlSheet.get_Range("A1", Convert.ToChar(socot + 65) + "1");                caption.Select();                caption.FormulaR1C1 = tieude;                //căn lề cho tiêu đề                caption.HorizontalAlignment = Excel.Constants.xlCenter;                caption.Font.Bold = true;                caption.VerticalAlignment = Excel.Constants.xlCenter;                caption.Font.Size = 15;                //màu nền cho tiêu đề                caption.Interior.ColorIndex = 20;                caption.RowHeight = 30;                //set thuoc tinh cho cac header                Excel.Range header = xlSheet.get_Range("A2", Convert.ToChar(socot + 65) + "2");                header.Select();                 header.HorizontalAlignment = Excel.Constants.xlCenter;                header.Font.Bold = true;                header.Font.Size = 10;                //điền tiêu đề cho các cột trong file excel                for (i = 0; i < socot; i++)                    xlSheet.Cells[2, i + 2] = dt.Columns[i].ColumnName;                //dien cot stt                xlSheet.Cells[2, 1] = "STT";                for (i = 0; i < sohang; i++)                    xlSheet.Cells[i + 3, 1] = i + 1;                //dien du lieu vao sheet                  for (i = 0; i < sohang; i++)                    for (j = 0; j < socot; j++)                    {                        xlSheet.Cells[i + 3, j + 2] = dt.Rows[i][j];                     }                //autofit độ rộng cho các cột                 for (i = 0; i < sohang; i++)                    ((Excel.Range)xlSheet.Cells[1, i + 1]).EntireColumn.AutoFit();                 //save file                xlBook.SaveAs(f.FileName, Excel.XlFileFormat.xlWorkbookNormal, missValue, missValue, missValue, missValue, Excel.XlSaveAsAccessMode.xlExclusive, missValue, missValue, missValue, missValue, missValue);                xlBook.Close(true, missValue, missValue);                xlApp.Quit();                                // release cac doi tuong COM                releaseObject(xlSheet);                releaseObject(xlBook);                releaseObject(xlApp);                result = true;            }            return result;        }     static  public void releaseObject(object obj)        {            try            {                System.Runtime.InteropServices.Marshal.ReleaseComObject(obj);                obj = null;            }            catch (Exception ex)            {                obj = null;               throw new  Exception("Exception Occured while releasing object " + ex.ToString());            }            finally            {                GC.Collect();            }        }           static public bool exportReport(int type,ReportDocument repd)        {             SaveFileDialog f  = new SaveFileDialog();             bool result=false;            switch(type)            {                case 1:                                 f.Filter = "Word file(*.doc)|*.doc";                    if (f.ShowDialog() == DialogResult.OK)                    {                        repd.ExportToDisk(CrystalDecisions.Shared.ExportFormatType.WordForWindows, f.FileName);                        result = true;                    }                    break;                case 2:                                        f.Filter = "Pdf file(*.pdf)|*.pdf";                    if (f.ShowDialog() == DialogResult.OK)                    {                        repd.ExportToDisk(CrystalDecisions.Shared.ExportFormatType.PortableDocFormat, f.FileName);                        result = true;                    }                    break;                case 3:                                       f.Filter = "Excel file(*.xls)|*.xls";                    if (f.ShowDialog() == DialogResult.OK)                    {                        repd.ExportToDisk(CrystalDecisions.Shared.ExportFormatType.Excel, f.FileName);                        result = true;                    }                    break;                default:                    MessageBox.Show("Khong chon dung loai ");                    break;                                 }            return result;        }    }}
    Muốn sử dụng bạn chỉ cần add Class này vào và gọi trực tiếp hàm thông qua tên lớp (không cần khỏi tạo 1 đối tượng mới của lớp ) và truyền tham số là OK
    Hàm này có thể dùng để trích xuất dữ liệu DataTable bất kỳ
    Vd: Datatable được sử dụng cho GridView hay Crystal Report...
    Chính vì thế nên việc export DataGridview hay Crystal Report ra excel cũng thục hiện dẽ dàng hơn !
    Chúc các bạn thàh công !

  2. #2
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    xlApp = new Excel.ApplicationClass(); <- mình bị lỗi ở dòng này. ko biết lý do vì sao??
    mình đã chụp trong file đính kèm. bạn xem dùm với. thank

  3. #3
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Uhm. Mình nghĩ bạn bị lỗi về Excel COM, bạn nên kiểm tra trong Task manager xem co EXCEL process nào đang chạy không nếu có 1 đống thì tắt hết. Nếu không có thì bạn có thể add lại EXCEL interop nếu cần.

  4. #4
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi webshot
    xlApp = new Excel.ApplicationClass(); <- mình bị lỗi ở dòng này. ko biết lý do vì sao??
    mình đã chụp trong file đính kèm. bạn xem dùm với. thank
    Lỗi này là do máy bạn chưa cài Office. Thân!

  5. #5
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Xu hướng mọi người sử dụng OpenSource nhiều, có ai có source xuất dữ liệu từ DataSet ra dạng file OpenOffice có thể đọc mà máy không cần cài Excel không nhỉ.
    Cảm ơn.

  6. #6
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Demo đơn giản thôi nhé! Bạn cần thêm j thì phát triển [IMG]images/smilies/biggrin.png[/IMG]

    Mã:
    using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Data.OleDb; using System.Text;using System.Windows.Forms; namespace ReadExcel{    public partial class Form1 : Form    {        public Form1()        {            InitializeComponent();        }         private void button1_Click(object sender, EventArgs e)        {            OpenFileDialog f = new OpenFileDialog();            f.Filter = "Excel File(.xls)|*.xls";            if (f.ShowDialog() == DialogResult.OK)            {                try                {                    LoadData(f.FileName);                }                catch(Exception xe)                {                    MessageBox.Show(xe.ToString());                }            }         }                      private void LoadData(string path)        {            string connstr = "Provider=Microsoft.Jet.Oledb.4.0;Data Source='" + path + "';Extended Properties=Excel 8.0";        OleDbConnection conn = new OleDbConnection(connstr);        string strSQL = "SELECT * FROM [Sheet1$]";         OleDbCommand cmd = new OleDbCommand(strSQL, conn);        DataSet ds = new DataSet();        OleDbDataAdapter da = new OleDbDataAdapter(cmd);        da.Fill(ds);        dataGridView1.DataSource = ds.Tables[0];        }    }}

  7. #7
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Hiện tại mình đang chuyền từ Form sang Silverlight. Mình cũng làm 1 Demo tương tự.Mình load 1 file Excel lên dataGrid. Mình đã load được file Excel lên dataGrid được rồi. Nhưng vẫn còn lỗi font unicode. Nếu bạn biết về Silverlight thì giúp mình với.Thank

  8. #8
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Vậy mình muốn import 1 file excel lên datagrid thì làm như thế nào bạn...Thank

  9. #9
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Xin chào mọi người, mình copy nguyên class này để chạy thử thì nó báo lỗi như file đính kèm. Nhờ mọi người hướng dẫn giùm đây là lỗi gì và cách khắc phục
    Xin cảm ơn trước !!!

  10. #10
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Lỗi COM ah, bạn thử gỡ Office ra rồi cài lại sau đó add Reference lại xem thế nào !
    Chúc thành công !

 

 
Trang 1 của 4 123 ... CuốiCuối

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •