Menggunakan C# untuk menghasilkan dokumen excel dalam aplikasi, dan bahkan menyediakan fungsi download langsung, merupakan aplikasi yang relatif umum. Berikut saya catat beberapa metode yang saya temui, dan ada beberapa hal yang perlu diperhatikan:
a) Pertama-tama tentukan kelas data:
kode
Konten Data kelas publik
{
string publik Nama { set;
string publik Alamat { set;
string publik Telepon { set;
string publik GetContentByIndex(indeks int)
{
string Nilai = string.Kosong;
beralih (indeks)
{
kasus 1:
Nilai = Nama;
merusak;
kasus 2:
Nilai = Alamat;
merusak;
kasus 3:
Nilai = Telepon;
merusak;
bawaan:
Nilai = "";
merusak;
}
Nilai pengembalian;
}
}
b) Metode paling sederhana: menghasilkan file excel secara langsung dengan menyatukan string HTML. Keuntungannya adalah: kodenya sangat nyaman dan dapat bekerja tanpa ekstensi antarmuka kantor apa pun; kerugiannya adalah: sel yang dicakup terbatas, meskipun dapat diatur melalui metode perantara, tetapi masih ada masalah format yang salah saat dibuka, yang tidak mempengaruhi penelusuran dan pengeditan normal, namun, untuk beberapa aplikasi yang perlu mengoperasikan file excel melalui kode, Anda mungkin mengalami masalah, seperti saat membaca konten secara menyeluruh OleDB.
1 Kekosongan publik GetExcelDataToClient()
2 {
3 Daftar<DataContent> arrDatas = Daftar baru<DataContent>() {
4 DataContent baru() { Alamat = "aaa", Nama = "aaa", Telepon = "aaa" },
5 DataContent baru() { Alamat='bbb', Telepon='bbb', Nama='bbb' },
6 DataContent baru() { Nama = "ccc", Telepon = "ccc", Alamat = "ccc"}
7};
8
9 StringBuilder sb = new StringBuilder("<HTML xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns= " http://www.w3.org/TR/REC-html40"><HEAD><META HTTP-EQUIV="Tipe Konten" content="text/html; charset=gb_2312-80 "><TITLE></TITLE><style>td{mso-number-format:" \@";}</style></HEAD><BODY><TABLE border="1"> ", 500);
10 // kolom judul.
11 sb.Append(string.Format("<TR><TD><B>Event_CourseId<B/></TD><TD><B>UserId</B></TD><TD><B>Dihadiri </B></TD>{0}</TR>", GetExCells(30)));
12 // kolom konten.
13 foreach (data Konten Data di arrDatas)
14 sb.Tambahkan(string.Format("<TR><TD>{0}</TD><TD>{1}</TD><TD>{2}</TD>{3}</TR> ", data.Nama, data.Alamat, data.Telepon, GetExCells(30)));
15 // menambahkan baris ekstensi.
16 sb.Tambahkan(GetExRows(50, 33));
17 // bagian terakhir.
18 sb.Tambahkan("</TABLE></BODY></HTML>");
19 // respon hasilnya sebagai file excel.
20 Response.ContentType = "application/vnd.ms-excel";
21 Response.AddHeader("Disposisi Konten", "lampiran; nama file=DataList.xls;tipe file=excel");
22 Response.ContentEncoding = Pengkodean.GetEncoding("utf-8");
23 Respon.Tulis(sb.ToString());
24 Respon.Flush();
25 Respon.End();
26}
27 // tambahkan sel ekstensi.
28 string pribadi GetExCells(int nomor)
29 {
30 StringBuilder sb = StringBuilder baru(200);
31 untuk (int i = 0; i < angka; i++)
32 sb.Tambahkan("<TD></TD>");
33 kembalikan sb.ToString();
34}
35 // tambahkan baris ekstensi.
36 string pribadi GetExRows(int rowNum, int colNum)
37 {
38 StringBuilder sb = StringBuilder baru(200);
39 untuk (int i = 0; i < nomor baris; i++)
40 sb.Append(string.Format("<TR>{0}</TR>", GetExCells(colNum)));
41 kembalikan sb.ToString();
42 }
c) Metode antarmuka umum: terutama menghasilkan file excel dengan memanggil komponen antarmuka Microsoft.Office.Interop.Excel yang disediakan oleh Office. Karakteristiknya adalah dapat menghilangkan masalah cakupan sel konten yang tidak lengkap, dan juga dapat menghilangkan masalah format prompt pembukaan tidak normal, tetapi untuk kasus pengoperasian file melalui OleDB, harus ditulis dengan cara yang relatif ketat, jika tidak maka akan ada masalah dengan kelainan format selama pengoperasian.
1 kekosongan pribadi Test4()
2 {
3 string filePath = @"C:Test.xls";
4 Daftar<DataContent> arrDatas = Daftar baru<DataContent>() {
5 DataContent baru() { Alamat = "aaa", Nama = "aaa", Telepon = "aaa" },
6 DataContent baru() { Alamat='bbb', Telepon='bbb', Nama='bbb' },
7 DataContent baru() { Nama = "ccc", Telepon = "ccc", Alamat = "ccc"}
8};
9
10 objek objOpt = Sistem.Refleksi.Nilai Hilang;
11 Excel.Aplikasi objExcel = null;
12 Excel.Buku Kerja objBooks = null;
13 Excel.Buku Kerja objBook = null;
14 mencoba
15 {
16 mencoba
17 {
18 objExcel = Excel.Aplikasi baru();
19}
20 tangkapan (Pengecualian ex)
dua puluh satu {
22 Console.Write(mis.Pesan);
dua puluh tiga }
dua puluh empat
25 objBooks = (Excel.Workbooks)objExcel.Workbooks;
26 objBook = (Excel.Workbook)(objBooks.Add(objOpt));
27 // Menambahkan data ke sel lembar kerja pertama di buku kerja baru.
28 Excel.Sheets objSheets = (Excel.Sheets)objBook.Worksheets;
29 Excel.Lembar Kerja objSheet = (Excel.Lembar Kerja)(objSheets.get_Item(1));
30 objSheet.Nama = "Daftar Data";
31 objSheet.Cells[1, 1] = "Nama";
32 objSheet.Cells[1, 2] = "Alamat";
33 objSheet.Cells[1, 3] = "Telepon";
34 Excel.Range objRange = objSheet.get_Range(objSheet.Cells[1, 1], objSheet.Cells[1, 3]);
35 //objRange.Font.Bold = benar;
36 objRange.Font.Ukuran = 18;
37 objRange.Interior.ColorIndex = 37;
38
39 untuk (int saya = 1; saya < 4; saya++)
40 {
41 objRange = objSheet.get_Range(objSheet.Cells[2, i], objSheet.Cells[2 + arrDatas.Count, i]);
42 objRange.NumberFormatLocal = "@";
43 untuk (int j = 0; j < arrDatas.Count; j++)
44 objSheet.Sel[2 + j, i] = arrDatas[j].GetContentByIndex(i);
45 }
46 objSheet.Kolom.AutoFit();
47 jika (System.IO.File.Exists(filePath))
48 Sistem.IO.File.Hapus(filePath);
49 // Simpan filenya.
50 objBook.SaveAs(filePath, Excel.XlFileFormat.xlWorkbookNormal, objOpt, objOpt,
51 objOpt, objOpt, Excel.XlSaveAsAccessMode.xlNoChange,
52 objOpt, objOpt, objOpt, objOpt, objOpt);
53 objBook.Tutup(salah, objOpt, objOpt);
54 objExcel.Keluar();
55 objExcel = nol;
56 GC.Kumpulkan();
57 //Respon file ke klien.
58 string downloadFileName = string.Format("{0:yyyyMMdd}", DateTime.Now) + "-" +
59 ini.Halaman.Pengguna.Identitas.Nama + "-DataList.xls";
60 Response.ContentType = "application/vnd.ms-excel";
61 Response.AddHeader("Disposisi Konten", "lampiran; nama file=" + downloadFileName + ";filetype=excel");
62 Response.ContentEncoding = Pengkodean.GetEncoding("utf-8");
63 Respon.WriteFile(filePath);
64 Respon.Flush();
65
66 jika (System.IO.File.Exists(filePath))
67 Sistem.IO.File.Hapus(filePath);
68 Respon.Akhir();
69 }
70 tangkapan (Pengecualian ex)
71 {
72 jika (objExcel!= null)
73 {
74 mencoba
75 {
76 foreach (Excel.Workbook wb di objExcel.Workbooks)
77 {
78 jika (wb != nol)
79 {
80 mencoba
81 {
82 wb.Tersimpan = benar;
83}
84 tangkapan {} }
85}
86}
87 objExcel.Buku Kerja.Tutup();
88 objExcel.Keluar();
89 objExcel = nol;
90 GC.Kumpulkan();
91 }
92 tangkapan {} }
93}
94}
95 }
96
-