Câu lạc bộ Hỗ Trợ Học Tập
Bạn có muốn phản ứng với tin nhắn này? Vui lòng đăng ký diễn đàn trong một vài cú nhấp chuột hoặc đăng nhập để tiếp tục.



 
Trang ChínhTrang Chính  Latest imagesLatest images  Tìm kiếmTìm kiếm  Đăng kýĐăng ký  Đăng NhậpĐăng Nhập  
  • Top posters
 Mr.Pakapun (256)
 ddtan90 (178)
 tvduong (147)
 dthnam90 (137)
 minhquankq (101)
 arianbo (70)
 DoanhNhan (54)
 chicken (53)
 stormit (52)
 gentle_storm (47)

 

 [Thắc mắc] - Ứng dụng .NET để tạo báo cáo dữ liệu bằng Excel?

Go down 
3 posters
Tác giảThông điệp
minhquankq
Mod
Mod
minhquankq


Tổng số bài gửi : 101
Join date : 05/01/2011
Age : 32
Đến từ : Đại học cần thơ

[Thắc mắc] - Ứng dụng .NET để tạo báo cáo dữ liệu bằng Excel? Empty
Bài gửiTiêu đề: [Thắc mắc] - Ứng dụng .NET để tạo báo cáo dữ liệu bằng Excel?   [Thắc mắc] - Ứng dụng .NET để tạo báo cáo dữ liệu bằng Excel? EmptyTue Jan 31, 2012 7:21 pm

Tôi có một vấn đề mong nhận được sự giúp đỡ từ mọi người.
Tình hình là tôi muốn làm một chương trình viết bằng C# để tạo báo cáo ra file excel có sẳn. Cụ thể: Người dùng sẽ tạo sẽ một file báo cáo mẩu bằng excel (như một template), sao đó vào chương trình chọn template đó để đỗ dữ liệu vào file excel theo mẩu. Vị trí để đỗ vào như thế nào sẽ được chỉ ra trong file excel theo một số cú pháp nào đó.

Không biết mọi người có tài liệu tham khảo nào về một vấn đề như vậy không có thể chia sẽ với.

Cám ơn rất nhiều! cheers
Về Đầu Trang Go down
http://AloneWithMe.co.cc
hhdang
Thành viên nhiệt tình
Thành viên nhiệt tình
avatar


Tổng số bài gửi : 29
Join date : 04/01/2011
Age : 33
Đến từ : sóc trăng

[Thắc mắc] - Ứng dụng .NET để tạo báo cáo dữ liệu bằng Excel? Empty
Bài gửiTiêu đề: Re: [Thắc mắc] - Ứng dụng .NET để tạo báo cáo dữ liệu bằng Excel?   [Thắc mắc] - Ứng dụng .NET để tạo báo cáo dữ liệu bằng Excel? EmptyWed Feb 01, 2012 9:16 am

minhquankq đã viết:
Tôi có một vấn đề mong nhận được sự giúp đỡ từ mọi người.
Tình hình là tôi muốn làm một chương trình viết bằng C# để tạo báo cáo ra file excel có sẳn. Cụ thể: Người dùng sẽ tạo sẽ một file báo cáo mẩu bằng excel (như một template), sao đó vào chương trình chọn template đó để đỗ dữ liệu vào file excel theo mẩu. Vị trí để đỗ vào như thế nào sẽ được chỉ ra trong file excel theo một số cú pháp nào đó.

Không biết mọi người có tài liệu tham khảo nào về một vấn đề như vậy không có thể chia sẽ với.

Cám ơn rất nhiều! cheers

Tôi chưa hiểu ý tưởng của bạn, nhưng tui biết nếu muốn xuất dữ liệu ra file excel thì bạn dùng Excel spreadsheets là dễ nhất.

Nếu bạn đã hiểu được Excel spreadsheets thì bạn có thể tạo ra các thủ tục xuất dữ liệu theo mẫu của bạn.

Excel spreadsheets là 1 định của excel. Bản thân của nó là xml. Vì là xml nên chúng ta muốn xuất dữ liệu ra file thì chỉ đơn giản là viết file text mà thôi, nhưng mà lúc đặt tên file cho nó thì có đuôi là xls để hệ thống kích hoạt excel khi mở file này.

Đoạn code này tui viết trong chương trình của tui dùng để xuất dữ liệu từ 1 datatable. Tham số thứ nhất là datatable chứa dữ liệu, tham số thứ 2 là file name, tham số thứ 3 là mảng các string header của cột, tham số thứ 4 là mảng các độ rộng cột, tham số thứ 5 là tiêu đề của file,tham số thứ 6 là mảng các tiêu đề phụ.


Code:
static public void exportToExcel(System.Data.DataTable sourceTable, string filename, string[] hearder, int[] with, string title,string []subtitle)
        {
            if (sourceTable.Columns.Count > 256 || sourceTable.Rows.Count > 65536) return;
            if (sourceTable.Columns.Count != hearder.Length) return;
            if (sourceTable.Columns.Count != with.Length) return;
            TextWriter tw = new StreamWriter(filename);
            //header
            string xml = "<?xml version=\"1.0\"?>\r\n";
            //element root
            xml += "<Workbook  xmlns=\"urn:schemas-microsoft-com:office:spreadsheet\"\r\n" +
            "xmlns:o=\"urn:schemas-microsoft-com:office:office\"\r\n" +
            "xmlns:x=\"urn:schemas-microsoft-com:office:excel\"\r\n" +
            "xmlns:ss=\"urn:schemas-microsoft-com:office:spreadsheet\">\r\n";
            //Styles
            xml += "<Styles>\r\n";
            xml += "<Style ss:ID=\"Default\" ss:Name=\"Normal\">\r\n" +
                    "<Alignment ss:Vertical=\"Bottom\"/>\r\n" +
                    "<Borders/>\r\n" +
                    "<Font/>\r\n" +
                    "<Interior/>\r\n" +
                    "<NumberFormat/>\r\n" +
                    "<Protection/>\r\n" +
                    "</Style>\r\n";
            xml += "<Style ss:ID=\"BoldColumn\">\r\n<Alignment ss:Horizontal=\"Center\" ss:Vertical=\"Bottom\"/>\r\n<Font x:Family=\"Swiss\" ss:Bold=\"1\"/>\r\n</Style>\r\n";
            xml += "<Style ss:ID=\"Title\">\r\n<Alignment ss:Horizontal=\"Center\" ss:Vertical=\"Bottom\"/>\r\n<Font x:Family=\"Swiss\" ss:Bold=\"1\" ss:Size=\"20\"/>\r\n</Style>\r\n";
            xml += "<Style ss:ID=\"StringLiteral\">\r\n <NumberFormat ss:Format=\"@\"/>\r\n </Style>\r\n";
            xml += "<Style ss:ID=\"Decimal\">\r\n <NumberFormat />\r\n </Style>\r\n";
            xml += "<Style ss:ID=\"Integer\">\r\n <NumberFormat />\r\n </Style>\r\n";
            xml += "<Style ss:ID=\"DateLiteral\">\r\n <NumberFormat ss:Format=\"mm/dd/yyyy;@\"/>\r\n </Style>\r\n";
            xml += "</Styles>\r\n";
            //worksheet
            xml += "<Worksheet ss:Name=\"Sheet1\">\r\n";
            //table
            xml += "<Table>\r\n";
            //Column
            for (int x = 0; x < sourceTable.Columns.Count; x++)
            {
                xml += "<Column ss:Width=\"" + with[x] * 10 + "\"/>\r\n";
            }

            xml += "<Row>\r\n";
            //title
            string me = "";
            if (sourceTable.Columns.Count > 1)
                me = "ss:MergeAcross=\"" + (sourceTable.Columns.Count - 1) + "\"";
            xml += "<Cell " + me + " ss:StyleID=\"Title\"><Data ss:Type=\"String\">";
            xml += title;
            xml += "</Data></Cell>\r\n";
            xml += "</Row>\r\n";

            if(subtitle!=null)
            for (int i = 0; i < subtitle.Length; i++)
            {
                xml += "<Row>\r\n";
                //title
                xml += "<Cell " + me + " ss:StyleID=\"BoldColumn\"><Data ss:Type=\"String\">";
                xml += subtitle[i];
                xml += "</Data></Cell>\r\n";
                xml += "</Row>\r\n";
            }

            xml += "<Row>\r\n";
            xml += "</Row>\r\n";
            xml += "<Row>\r\n";
            for (int x = 0; x < sourceTable.Columns.Count; x++)
            {
                xml += "<Cell ss:StyleID=\"BoldColumn\"><Data ss:Type=\"String\">";
                xml += hearder[x];
                xml += "</Data></Cell>\r\n";
            }
            xml += "</Row>\r\n";

            foreach (DataRow x in sourceTable.Rows)
            {
                xml += "<Row>\r\n";
                for (int y = 0; y < sourceTable.Columns.Count; y++)
                {
                    System.Type rowType;
                    rowType = x[y].GetType();
                    switch (rowType.ToString())
                    {
                        case "System.String":
                            string XMLstring = x[y].ToString();
                            XMLstring = XMLstring.Trim();
                            XMLstring = XMLstring.Replace("&", "&");
                            XMLstring = XMLstring.Replace(">", ">");
                            XMLstring = XMLstring.Replace("<", "<");
                            xml += "<Cell ss:StyleID=\"StringLiteral\">" +
                                          "<Data ss:Type=\"String\">";
                            xml += XMLstring;
                            xml += "</Data></Cell>";
                            break;
                        case "System.DateTime":
                            DateTime XMLDate = (DateTime)x[y];
                            string XMLDatetoString = ""; //Excel Converted Date
                            XMLDatetoString = XMLDate.Year.ToString() +
                                "-" +
                                (XMLDate.Month < 10 ? "0" +
                                XMLDate.Month.ToString() : XMLDate.Month.ToString()) +
                                "-" +
                                (XMLDate.Day < 10 ? "0" +
                                XMLDate.Day.ToString() : XMLDate.Day.ToString()) +
                                "T" +
                                (XMLDate.Hour < 10 ? "0" +
                                XMLDate.Hour.ToString() : XMLDate.Hour.ToString()) +
                                ":" +
                                (XMLDate.Minute < 10 ? "0" +
                                XMLDate.Minute.ToString() : XMLDate.Minute.ToString()) +
                                ":" +
                                (XMLDate.Second < 10 ? "0" +
                                XMLDate.Second.ToString() : XMLDate.Second.ToString()) +
                                ".000";
                            xml += "<Cell ss:StyleID=\"DateLiteral\">" +
                                        "<Data ss:Type=\"DateTime\">";
                            xml += XMLDatetoString;
                            xml += "</Data></Cell>";
                            break;
                        case "System.Boolean":
                            xml += "<Cell ss:StyleID=\"StringLiteral\">" +
                                        "<Data ss:Type=\"String\">";
                            xml += x[y].ToString();
                            xml += "</Data></Cell>";
                            break;
                        case "System.Int16":
                        case "System.Int32":
                        case "System.Int64":
                        case "System.Byte":
                            xml += "<Cell ss:StyleID=\"Integer\">" +
                                    "<Data ss:Type=\"Number\">";
                            xml += x[y].ToString();
                            xml += "</Data></Cell>";
                            break;
                        case "System.Decimal":
                        case "System.Double":
                            xml += "<Cell ss:StyleID=\"Decimal\">" +
                                  "<Data ss:Type=\"Number\">";
                            xml += x[y].ToString();
                            xml += "</Data></Cell>";
                            break;
                        case "System.DBNull":
                            xml += "<Cell ss:StyleID=\"StringLiteral\">" +
                                  "<Data ss:Type=\"String\">";
                            xml += "";
                            xml += "</Data></Cell>";
                            break;
                        default:
                            throw (new Exception(rowType.ToString() + " not handled."));
                    }
                }
                xml += "</Row>\r\n";
            }

            xml += "</Table>\r\n";
            xml += "</Worksheet>\r\n";
            xml += "</Workbook>\r\n";
            tw.WriteLine(xml);
            tw.Close();
        }

Đây là thủ tục xử lý công việc xuất danh sách hàng hóa trong ứng dụng của tui.

Code:
private void btn_excel_Click(object sender, EventArgs e)
        {
            SaveFileDialog saveFileDialog1 = new SaveFileDialog();
            saveFileDialog1.Filter = "(*.xls)|*.xls";
            DataTable tb = new DataTable();
            saveFileDialog1.FileName = "hanghoa";
            try
            {
                btn_tim_Click(null, null);
                if (saveFileDialog1.ShowDialog() == DialogResult.OK)
                {
                    string[] header = new string[dataGridViewX1.Columns.Count];
                    for (int i = 0; i < dataGridViewX1.Columns.Count; i++)
                        header[i] = dataGridViewX1.Columns[i].HeaderText;
                    int[] w ={ 5, 30, 9, 9, 9 ,9};

                    if (saveFileDialog1.CheckFileExists == true) System.IO.File.Delete(saveFileDialog1.FileName);
                    [You must be registered and logged in to see this link.] saveFileDialog1.FileName);
                        QLBH.Class.excel.exportToExcel((DataTable)dataGridViewX1.DataSource, saveFileDialog1.FileName, header, w, "Danh Sách Hàng Hóa", null);
                    System.Diagnostics.Process.Start(saveFileDialog1.FileName);
                }

            }

            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
                MessageBox.Show("Có thể trong table có dữ liệu đa phương tiện");
            }
            finally
            {
                mysql.con.Close();
            }
        }
Về Đầu Trang Go down
minhquankq
Mod
Mod
minhquankq


Tổng số bài gửi : 101
Join date : 05/01/2011
Age : 32
Đến từ : Đại học cần thơ

[Thắc mắc] - Ứng dụng .NET để tạo báo cáo dữ liệu bằng Excel? Empty
Bài gửiTiêu đề: Re: [Thắc mắc] - Ứng dụng .NET để tạo báo cáo dữ liệu bằng Excel?   [Thắc mắc] - Ứng dụng .NET để tạo báo cáo dữ liệu bằng Excel? EmptyWed Feb 01, 2012 12:41 pm

Cám ơn huynh...
Nhưng cái này là đưa dữ liệu của nguyên một bảng trong DB vào excel.
Nhưng ý e muốn là đưa những cái cần.
Mục đích của cái này là e làm báo cáo. ví dụ như chổ ô a1 e để tên là họ tên nhân viên, thì ở ô b1 sẽ để một công thức gì đó để khi chương trình mình chạy thì sẽ dự vào công thức đó mà lấy nhân viên phù hợp đưa vào cho ô đó.
Về Đầu Trang Go down
http://AloneWithMe.co.cc
Mr.Pakapun
Mod
Mod
Mr.Pakapun


Tổng số bài gửi : 256
Join date : 25/02/2011
Age : 32
Đến từ : CTU

[Thắc mắc] - Ứng dụng .NET để tạo báo cáo dữ liệu bằng Excel? Empty
Bài gửiTiêu đề: Re: [Thắc mắc] - Ứng dụng .NET để tạo báo cáo dữ liệu bằng Excel?   [Thắc mắc] - Ứng dụng .NET để tạo báo cáo dữ liệu bằng Excel? EmptyWed Feb 01, 2012 8:49 pm

[Thắc mắc] - Ứng dụng .NET để tạo báo cáo dữ liệu bằng Excel? Angry
vẫn chưa hiểu gì hết....hixx
Về Đầu Trang Go down
minhquankq
Mod
Mod
minhquankq


Tổng số bài gửi : 101
Join date : 05/01/2011
Age : 32
Đến từ : Đại học cần thơ

[Thắc mắc] - Ứng dụng .NET để tạo báo cáo dữ liệu bằng Excel? Empty
Bài gửiTiêu đề: Re: [Thắc mắc] - Ứng dụng .NET để tạo báo cáo dữ liệu bằng Excel?   [Thắc mắc] - Ứng dụng .NET để tạo báo cáo dữ liệu bằng Excel? EmptyThu Feb 02, 2012 11:03 am

=((.. J mà hồi sáng không nói, để nói cho nghe để có biết chỉ zj..Very Happy
Về Đầu Trang Go down
http://AloneWithMe.co.cc
Sponsored content





[Thắc mắc] - Ứng dụng .NET để tạo báo cáo dữ liệu bằng Excel? Empty
Bài gửiTiêu đề: Re: [Thắc mắc] - Ứng dụng .NET để tạo báo cáo dữ liệu bằng Excel?   [Thắc mắc] - Ứng dụng .NET để tạo báo cáo dữ liệu bằng Excel? Empty

Về Đầu Trang Go down
 
[Thắc mắc] - Ứng dụng .NET để tạo báo cáo dữ liệu bằng Excel?
Về Đầu Trang 
Trang 1 trong tổng số 1 trang
 Similar topics
-
» [Thắc mắc]: send mail bằng code php?
» [Thắc mắc] - Tự động lấy Thumbnail từ video bằng javascript
» Tài Liệu Luyện Writing để thi bằng B
» Quản lý kinh doanh vật liệu xây dựng
» Tìm đường đi ngắn nhất bằng giải thuật Ford Bellman bằng C#

Permissions in this forum:Bạn không có quyền trả lời bài viết
Câu lạc bộ Hỗ Trợ Học Tập :: LẬP TRÌNH :: .::LẬP TRÌNH VB/C#-
Chuyển đến