Trang ChínhTrang Chính  CalendarCalendar  Trợ giúpTrợ giúp  Tìm kiếmTìm kiếm  Thành viênThành viên  NhómNhóm  Đăng kýĐăng ký  Đăng NhậpĐăng Nhập  
News & Announcements
  • Top posters
 Mr.Pakapun (256)
 ddtan90 (178)
 tvduong (147)
 dthnam90 (137)
 minhquankq (101)
 arianbo (70)
 DoanhNhan (54)
 chicken (53)
 stormit (52)
 gentle_storm (47)

Share | 
 

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

Xem chủ đề cũ hơn Xem chủ đề mới hơn Go down 
Tác giảThông điệp
minhquankq
Mod
Mod
avatar

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

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?   Tue 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

_____________________
Đây là thời đại nào rồi nhỉ Shocked
Về Đầu Trang Go down
Xem lý lịch thành viên http://AloneWithMe.co.cc
hhdang
Thành viên nhiệt tình
Thành viên nhiệt tình


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

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?   Wed 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
Xem lý lịch thành viên
minhquankq
Mod
Mod
avatar

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

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?   Wed 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 ô đó.

_____________________
Đây là thời đại nào rồi nhỉ Shocked
Về Đầu Trang Go down
Xem lý lịch thành viên http://AloneWithMe.co.cc
Mr.Pakapun
Mod
Mod
avatar

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

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?   Wed Feb 01, 2012 8:49 pm


vẫn chưa hiểu gì hết....hixx

_____________________


Về Đầu Trang Go down
Xem lý lịch thành viên
minhquankq
Mod
Mod
avatar

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

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?   Thu 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

_____________________
Đây là thời đại nào rồi nhỉ Shocked
Về Đầu Trang Go down
Xem lý lịch thành viên http://AloneWithMe.co.cc
Sponsored content




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?   

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?
Xem chủ đề cũ hơn Xem chủ đề mới hơn Về Đầu Trang 
Trang 1 trong tổng số 1 trang
 Similar topics
-
» Tính thủy triều theo lịch thủy triều Anh
» Bài toán tính thủy triều theo Lịch thủy triều Anh (excel)
» Các bài toán hàng hải giải bằng Excel
» Giải bài toán hướng và tốc độ gió bằng excel
» Dự toán Excel Toàn tập - TLT

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