日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

告别ASP.NET操作EXCEL的烦恼

發布時間:2024/4/14 asp.net 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 告别ASP.NET操作EXCEL的烦恼 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Copy From 告別ASP.NET操作EXCEL的煩惱(總結篇)



公元19XX年前,關于EXCEL的操作就如滔滔江水,連綿不絕,真正操作EXCEL我也是從去年下半年開始的,有些比較復雜的年度報表之類的,做起來也有點費力,不過還是都能畫出來了,關于EXCEL的報表導出,考慮到導出耗時的問題我主要采用AJAX來做的,分別捕捉幾個起止狀態,給客戶端提示3個狀態:正在檢索數據。。。---》準備導出數據。。。(只是從數據庫成功取出,還沒有讀寫excel文件)--》正在讀寫文件--》導出數據成功,當然如果哪一過程出錯,都有對應的提示,只所以想到寫這篇文章,主要是因為今年有個系統的部分EXCEL的操作也讓我做,順便結合之前操作EXCEL的經驗作一下總結,可能也算不上什么,對于絕大多數來說也沒什么技術含量,網上一搜一大把,但我想還是有必要總結一下,至少能給園子里的新手些許幫助,OK,Let's Go...

?? 一. 程序操作EXCEL的應用主要還是在統計報表方面,您可能會考慮讀EXCEL模板,也可能會考慮沒必要讀模板,其實讀不讀模板都能達到一樣的效果,看實際情況而用了。
???????1. 讀模板的話,首先模板存放在某個路徑下,根據模板把從數據庫里取出的數據寫回EXCEL然后生成一個新的EXCEL存放都另一個路徑以供下載,模板不變。
????????? 我這里的EXCEL操作主要是在VS2005里的,VS2003也可以的,不過沒怎么研究03里的操作(文章最后我會把05,03的示例下載地址貼上)vs05中操作EXCEL直接引用.NET自帶的COM組件,添加后項目的bin目錄下會自動出現
?????
Interop.Excel.dll這個DLL(需安裝office2003 excel,下面的說明及示例都是基于office2003的,版本不同調用可能會不一樣)
頁面的命名空間引用 using Excel;
下面是調用模板的一段代碼
?1??#region?使用模板導出Excel表
?2?????????????????case?"ReportByTemp":
?3?????????????????????{
?4?
?5?????????????????????????DataView?dv?=?Cache["ReportByTemp"]?as?DataView;
?6?????????????????????????//建立一個Excel.Application的新進程
?7?????????????????????????Excel.Application?app?=?new?Excel.Application();
?8?????????????????????????if?(app?==?null)
?9?????????????????????????{
10?????????????????????????????return;
11?????????????????????????}
12?????????????????????????app.Visible?=?false;
13?????????????????????????app.UserControl?=?true;
14?????????????????????????Workbooks?workbooks?=?app.Workbooks;
15?????????????????????????_Workbook?workbook?=?workbooks.Add(template_path?+?"\\EXCEL測試模板.xls");//這里的Add方法里的參數就是模板的路徑
16?????????????????????????Sheets?sheets?=?workbook.Worksheets;
17?????????????????????????_Worksheet?worksheet?=?(_Worksheet)sheets.get_Item(1);//模板只有一個sheet表
18?????????????????????????if?(worksheet?==?null)
19?????????????????????????{
20?????????????????????????????return;
21?????????????????????????}
22?
23?????????????????????????int?rowNum?=?0;
24?????????????????????????for?(int?i?=?0;?i?<?dv.Count;?i++)
25?????????????????????????{
26?????????????????????????????rowNum?=?i?+?1;
27?????????????????????????????worksheet.Cells[3?+?i,?1]?=?rowNum;
28?????????????????????????????worksheet.Cells[3?+?i,?2]?=?dv[i].Row[0].ToString();
29?????????????????????????????worksheet.Cells[3?+?i,?3]?=?dv[i].Row[1].ToString();
30?
31?????????????????????????????excelOperate.SetBold(worksheet,?worksheet.Cells[3?+?i,?1],?worksheet.Cells[3?+?i,?1]);?//黑體
32?????????????????????????????excelOperate.SetHAlignCenter(worksheet,?worksheet.Cells[3?+?i,?1],?worksheet.Cells[3?+?i,?3]);//居中
33?????????????????????????????worksheet.get_Range(worksheet.Cells[3?+?i,?1],?worksheet.Cells[3?+?i,?3]).Borders.Color?=?System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.Black);
34?
35?????????????????????????}
36?
37?????????????????????????tick?=?DateTime.Now.Ticks.ToString();
38?????????????????????????save_path?=?temp_path?+?"\\"?+?tick?+?".xls";
39?????????????????????????workbook.SaveAs(save_path,?Missing.Value,?Missing.Value,?Missing.Value,?Missing.Value,?Missing.Value,?Excel.XlSaveAsAccessMode.xlNoChange,?Missing.Value,?Missing.Value,?Missing.Value,?Missing.Value,?Missing.Value);
40?????????????????????????excelOperate.Dispose(worksheet,?workbook,?app);//關閉Excel進程
41?
42?????????????????????}
43?????????????????????break;
44?????????????????#endregion 效果如下:

???????
???????2. 不讀模板的話,調用的時候其實會繼承一個空白模板,然后寫入數據,程序畫表頭,最終達到一樣的效果,程序如下:
?1??#region?不使用模板生成Excel表
?2?????????????????case?"ReportByNone":
?3?????????????????????{
?4?
?5?????????????????????????DataView?dv?=?Cache["ReportByNone"]?as?DataView;
?6?????????????????????????//建立一個Excel.Application的新進程
?7?????????????????????????Excel.Application?app?=?new?Excel.Application();
?8?????????????????????????if?(app?==?null)
?9?????????????????????????{
10?????????????????????????????return;
11?????????????????????????}
12?????????????????????????app.Visible?=?false;
13?????????????????????????app.UserControl?=?true;
14?????????????????????????Workbooks?workbooks?=?app.Workbooks;
15?????????????????????????_Workbook?workbook?=?workbooks.Add(XlWBATemplate.xlWBATWorksheet);//這里的Add方法里的參數就相當于繼承了一個空模板(暫這樣理解吧)
16?????????????????????????Sheets?sheets?=?workbook.Worksheets;
17?????????????????????????_Worksheet?worksheet?=?(_Worksheet)sheets.get_Item(1);
18?????????????????????????if?(worksheet?==?null)
19?????????????????????????{
20?????????????????????????????return;
21?????????????????????????}
22?
23?????????????????????????worksheet.get_Range(worksheet.Cells[1,?1],?worksheet.Cells[1,?3]).Merge(Missing.Value);?//橫向合并
24?????????????????????????worksheet.get_Range(worksheet.Cells[1,?1],?worksheet.Cells[1,?1]).Value2?=?"導出EXCEL測試一";
25?????????????????????????excelOperate.SetBold(worksheet,?worksheet.Cells[1,?1],?worksheet.Cells[1,?1]);?//黑體
26?????????????????????????excelOperate.SetHAlignCenter(worksheet,?worksheet.Cells[1,?1],?worksheet.Cells[1,?1]);//居中
27?????????????????????????excelOperate.SetBgColor(worksheet,?worksheet.Cells[1,?1],?worksheet.Cells[1,?1],?System.Drawing.Color.Red);//背景色
28?????????????????????????excelOperate.SetFontSize(worksheet,?worksheet.Cells[1,?1],?worksheet.Cells[1,?1],?16);//字體大小
29?????????????????????????excelOperate.SetRowHeight(worksheet,?worksheet.Cells[1,?1],?worksheet.Cells[1,?1],?32.25);//行高
30?????????????????????????worksheet.get_Range(worksheet.Cells[1,?1],?worksheet.Cells[1,?1]).Borders.Color?=?System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.Black);//黑色連續邊框
31?
32?????????????????????????worksheet.Cells[2,?1]?=?"序號";
33?????????????????????????worksheet.Cells[2,?2]?=?"公司";
34?????????????????????????worksheet.Cells[2,?3]?=?"部門";
35?????????????????????????excelOperate.SetBold(worksheet,?worksheet.Cells[2,?1],?worksheet.Cells[2,?3]);?//黑體
36?????????????????????????worksheet.get_Range(worksheet.Cells[2,?1],?worksheet.Cells[2,?3]).Borders.Color?=?System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.Black);
37?????????????????????????excelOperate.SetHAlignRight(worksheet,?worksheet.Cells[2,?1],?worksheet.Cells[2,?3]);
38?????????????????????????excelOperate.SetBgColor(worksheet,?worksheet.Cells[2,?1],?worksheet.Cells[2,?3],?System.Drawing.Color.Silver);//背景色
39?????????????????????????int?rowNum?=?0;
40?????????????????????????for?(int?i?=?0;?i?<?dv.Count;?i++)
41?????????????????????????{
42?????????????????????????????rowNum?=?i?+?1;
43?????????????????????????????worksheet.Cells[3?+?i,?1]?=?rowNum;
44?????????????????????????????worksheet.Cells[3?+?i,?2]?=?dv[i].Row[0].ToString();
45?????????????????????????????worksheet.Cells[3?+?i,?3]?=?dv[i].Row[1].ToString();
46?
47?????????????????????????????excelOperate.SetBold(worksheet,?worksheet.Cells[3?+?i,?1],?worksheet.Cells[3?+?i,?1]);?//黑體
48?????????????????????????????excelOperate.SetHAlignCenter(worksheet,?worksheet.Cells[3?+?i,?1],?worksheet.Cells[3?+?i,?3]);//居中
49?????????????????????????????worksheet.get_Range(worksheet.Cells[3?+?i,?1],?worksheet.Cells[3?+?i,?3]).Borders.Color?=?System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.Black);//設置邊框顏色,不然打印預覽,會非常不雅觀
50?
51?????????????????????????}
52?????????????????????????excelOperate.SetColumnWidth(worksheet,?"A",?10);
53?????????????????????????excelOperate.SetColumnWidth(worksheet,?"B",?20);
54?????????????????????????excelOperate.SetColumnWidth(worksheet,?"C",?20);
55?????????????????????????worksheet.Name?=?"導出EXCEL測試一";
56?
57?????????????????????????tick?=?DateTime.Now.Ticks.ToString();
58?????????????????????????save_path?=?temp_path?+?"\\"+?tick?+?".xls";
59?????????????????????????workbook.SaveAs(save_path,?Missing.Value,?Missing.Value,?Missing.Value,?Missing.Value,?Missing.Value,?Excel.XlSaveAsAccessMode.xlNoChange,?Missing.Value,?Missing.Value,?Missing.Value,?Missing.Value,?Missing.Value);
60?????????????????????????excelOperate.Dispose(worksheet,?workbook,?app);//關閉Excel進程
61?
62?????????????????????}
63?????????????????????break;
64?
65?????????????????#endregion 效果如下:


以上我給了兩個最簡單的操作說明,下面詳細說一下對于一些稍微復雜的報表的生成處理

????? 二. 對于復雜的EXCEL報表的生成處理,無非是縱向合并相同的數據行及嵌套縱向合并等一些操作,下面就幾個具有針對性的報表作下說明.
??????????? 1.要生成相對復雜的EXCEL表,在從數據庫取數據時,要注意先按照合理的要求排好序,有時候可能order by后面要跟好幾個字段,而且這幾個字段誰先誰后也要注意,因為這些會直接影響報表呈現的效果,比如你的EXCEL表要按月份統計國內外的項目,顯示出來的時候要多個項目相同的人連續,那么排序就可能要這樣order by 月份,項目類別,用戶ID,項目ID(這是寫好的視圖,基于視圖來檢索的),這個排序的字段順序就不能變了,變了的話就不太好生成想要的形式了,如下圖:

這個也是動態畫的,用了個簡單的模板,模板就一個表頭,沒多大意義,除非表頭很復雜而且在列表中不需要重畫,考慮模板就比較好,向上面那個一月份國際的和其它月份的都是需要重畫表頭的。至于合并,如果不是嵌套的合并,我們可以在向模板循環寫數據的時候直接控制,比如下面一個簡單的寫法:
?1??for?(i?=?0;?i?<?table.Rows.Count;?i++)
?2?????????????????????????????{
?3?????????????????????????????????bidName?=?table.Rows[index]["BIDNAME"].ToString();
?4?????????????????????????????????if?(table.Rows[i]["BIDNAME"].ToString()?==?bidName)
?5?????????????????????????????????{
?6?????????????????????????????????????projNum++;
?7?????????????????????????????????????worksheet.Cells[5?+?i,?2]?=?table.Rows[i]["PROJNO"];
?8?????????????????????????????????????worksheet.Cells[5?+?i,?3]?=?table.Rows[i]["PROJNAME"];
?9?????????????????????????????????????worksheet.Cells[5?+?i,?4]?=?table.Rows[i]["STAT_DATE"];
10?????????????????????????????????????worksheet.Cells[5?+?i,?5]?=?table.Rows[i]["PROJTYPE"];
11?????????????????????????????????????worksheet.Cells[5?+?i,?6]?=?table.Rows[i]["CONTENT"];
12?????????????????????????????????????worksheet.Cells[5?+?i,?7]?=?table.Rows[i]["OPENDT"];
13?????????????????????????????????????worksheet.Cells[5?+?i,?8]?=?table.Rows[i]["OPENADDRESS"];
14?????????????????????????????????????worksheet.Cells[5?+?i,?9]?=?table.Rows[i]["REV_DATE"];
15?????????????????????????????????????worksheet.Cells[5?+?i,?10]?=?table.Rows[i]["BID_UNIT"];
16?????????????????????????????????????worksheet.Cells[5?+?i,?11]?=?table.Rows[i]["AGT_AMOUNT"];
17?????????????????????????????????????worksheet.Cells[5?+?i,?12]?=?table.Rows[i]["CURRENCY"]?+?":"?+?table.Rows[i]["BIDSER_AMOUNT"];
18?????????????????????????????????????worksheet.Cells[5?+?i,?13]?=?table.Rows[i]["SENDDATE"];
19?????????????????????????????????????worksheet.Cells[5?+?i,?14]?=?table.Rows[i]["CURRENCY"]?+?":"?+?table.Rows[i]["BIDPRICE"];
20?????????????????????????????????????worksheet.Cells[5?+?i,?15]?=?table.Rows[i]["BOOKAMOUNT"];
21?????????????????????????????????????worksheet.Cells[5?+?i,?16]?=?table.Rows[i]["CURRENCY"]?+?":"?+?table.Rows[i]["BAIL_AMOUNT"];
22?????????????????????????????????????worksheet.Cells[5?+?i,?17]?=?table.Rows[i]["USERNAME"];
23?????????????????????????????????????worksheet.Cells[5?+?i,?18]?=?table.Rows[i]["SECOND_USER"];
24?????????????????????????????????????worksheet.Cells[5?+?i,?19]?=?"";
25?????????????????????????????????????worksheet.get_Range(worksheet.Cells[5?+?i,?1],?worksheet.Cells[5?+?i,?19]).Borders.Color?=?System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.Black);
26?????????????????????????????????????continue;
27?????????????????????????????????}
28?
29?????????????????????????????????worksheet.get_Range(worksheet.Cells[5?+?rowid,?1],?worksheet.Cells[5?+?i?-?1,?1]).Merge(Missing.Value);?//將第一列按投標單位合并
30?????????????????????????????????worksheet.get_Range(worksheet.Cells[5?+?rowid,?1],?worksheet.Cells[5?+?rowid,?1]).Value2?=?bidName?+?"("?+?projNum.ToString()?+?"個項目)";//合并后的單元格內容 合并單元格的時候也要注意一個問題,就是合并的單元格必須是為空的,不然在執行合并時,會提示“合并后的單元格的值將丟失”,具體不這樣提示的,大致是這個意思,一般我們合并都單元格相同的內容,在合并前我們先保存那個值,再清空后合并,上面的代碼中把worksheet.Cell[5+rowid,1]這里系列的單元格的值空出來了,沒寫數據,而且最后合并了再寫值,避免了去循環清空。
???? 2.嵌套的合并向上面那樣做可能控制比較麻煩,而且思路可能很混亂,我們可以考慮先循環填充所有的數據,在循環出來要合并的列,比如像下面的這張表

先循環填充數據,如下:
?1??int?index?=?0,?rownum?=?0;
?2?????????????????????????????string?ProjNo?=?"";
?3?????????????????????????????for?(i?=?0;?i?<?table.Rows.Count;?i++)
?4?????????????????????????????{
?5?????????????????????????????????ProjNo?=?table.Rows[index]["PROJNO"].ToString();
?6?????????????????????????????????if?(table.Rows[i]["PROJNO"].ToString()?==?ProjNo)
?7?????????????????????????????????{
?8?????????????????????????????????????wksheet.Cells[3?+?i,?1]?=?rownum?+?1;
?9?????????????????????????????????????wksheet.Cells[3?+?i,?2]?=?"'"?+?table.Rows[i]["PROJNO"];???//加上單引號保證以0開頭的字符原樣輸出
10?????????????????????????????????????wksheet.Cells[3?+?i,?3]?=?"'"?+?table.Rows[i]["PROJNAME"];
11?????????????????????????????????????wksheet.Cells[3?+?i,?4]?=?"'"?+?table.Rows[i]["PA_NAME"];
12?????????????????????????????????????wksheet.Cells[3?+?i,?5]?=?"'"?+?table.Rows[i]["BIDER_NAME"];
13?????????????????????????????????????wksheet.Cells[3?+?i,?6]?=?table.Rows[i]["BAIL_AMOUNT"];
14?????????????????????????????????????wksheet.Cells[3?+?i,?7]?=?table.Rows[i]["NOT_BACK"];
15?????????????????????????????????????wksheet.get_Range(wksheet.Cells[3?+?i,?1],?wksheet.Cells[3?+?i,?7]).Borders.Color?=?System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.Black);
16?????????????????????????????????????continue;
17?????????????????????????????????}
18?
19?????????????????????????????????index?=?i;
20?????????????????????????????????rownum++;
21?????????????????????????????????i--;
22?
23?????????????????????????????} 下面合并前三列相同內容的單元:
?1??//合并前三列操作
?2?????????????????????????????int?m?=?1,?rowid?=?3,?k;
?3?????????????????????????????string?projName?=?"";
?4?????????????????????????????for?(k?=?3;?k?<=?i?+?2;?k++)
?5?????????????????????????????{
?6?????????????????????????????????if?(Convert.ToInt32(wksheet.get_Range(wksheet.Cells[k,?1],?wksheet.Cells[k,?1]).Value2)?==?m)
?7?????????????????????????????????{
?8?????????????????????????????????????ProjNo?=?wksheet.get_Range(wksheet.Cells[k,?2],?wksheet.Cells[k,?2]).Value2.ToString();
?9?????????????????????????????????????projName?=?wksheet.get_Range(wksheet.Cells[k,?3],?wksheet.Cells[k,?3]).Value2.ToString();
10?????????????????????????????????????wksheet.get_Range(wksheet.Cells[k,?1],?wksheet.Cells[k,?1]).Value2?=?"";
11?????????????????????????????????????wksheet.get_Range(wksheet.Cells[k,?2],?wksheet.Cells[k,?2]).Value2?=?"";
12?????????????????????????????????????wksheet.get_Range(wksheet.Cells[k,?3],?wksheet.Cells[k,?3]).Value2?=?"";
13?????????????????????????????????????continue;
14?????????????????????????????????}
15?????????????????????????????????wksheet.get_Range(wksheet.Cells[rowid,?1],?wksheet.Cells[k?-?1,?1]).Merge(Missing.Value);
16?????????????????????????????????wksheet.get_Range(wksheet.Cells[rowid,?1],?wksheet.Cells[rowid,?1]).Value2?=?m;
17?
18?????????????????????????????????wksheet.get_Range(wksheet.Cells[rowid,?2],?wksheet.Cells[k?-?1,?2]).Merge(Missing.Value);
19?????????????????????????????????wksheet.get_Range(wksheet.Cells[rowid,?2],?wksheet.Cells[rowid,?2]).Value2?=?"'"?+?ProjNo;
20?
21?????????????????????????????????wksheet.get_Range(wksheet.Cells[rowid,?3],?wksheet.Cells[k?-?1,?3]).Merge(Missing.Value);
22?????????????????????????????????wksheet.get_Range(wksheet.Cells[rowid,?3],?wksheet.Cells[rowid,?3]).Value2?=?"'"?+?projName;
23?
24?????????????????????????????????m++;
25?????????????????????????????????rowid?=?k;
26?????????????????????????????????k--;
27?????????????????????????????}
28?????????????????????????????//跳出循環后合并最后一個招標項目
29?
30?????????????????????????????wksheet.get_Range(wksheet.Cells[rowid,?1],?wksheet.Cells[k?-?1,?1]).Merge(Missing.Value);
31?????????????????????????????wksheet.get_Range(wksheet.Cells[rowid,?1],?wksheet.Cells[rowid,?1]).Value2?=?m;
32?
33?????????????????????????????wksheet.get_Range(wksheet.Cells[rowid,?2],?wksheet.Cells[k?-?1,?2]).Merge(Missing.Value);
34?????????????????????????????wksheet.get_Range(wksheet.Cells[rowid,?2],?wksheet.Cells[rowid,?2]).Value2?=?"'"?+?ProjNo;
35?
36?????????????????????????????wksheet.get_Range(wksheet.Cells[rowid,?3],?wksheet.Cells[k?-?1,?3]).Merge(Missing.Value);
37?????????????????????????????wksheet.get_Range(wksheet.Cells[rowid,?3],?wksheet.Cells[rowid,?3]).Value2?=?"'"?+?projName; 下面合并標段列
?1??//合并標段列
?2?
?3?????????????????????????????index?=?0;?rowid?=?3;?//重置變量
?4?????????????????????????????string?pa_name?=?string.Empty;?//標段名稱
?5?????????????????????????????for?(k?=?3;?k?<=?i?+?2;?k++)
?6?????????????????????????????{
?7?????????????????????????????????pa_name?=?table.Rows[index]["PA_NAME"].ToString();
?8?????????????????????????????????if?(wksheet.get_Range(wksheet.Cells[k,?4],?wksheet.Cells[k,?4]).Value2.ToString()?==?pa_name)
?9?????????????????????????????????{
10?????????????????????????????????????wksheet.get_Range(wksheet.Cells[k,?4],?wksheet.Cells[k,?4]).Value2?=?"";
11?????????????????????????????????????continue;
12?????????????????????????????????}
13?????????????????????????????????wksheet.get_Range(wksheet.Cells[rowid,?4],?wksheet.Cells[k?-?1,?4]).Merge(Missing.Value);
14?????????????????????????????????wksheet.get_Range(wksheet.Cells[rowid,?4],?wksheet.Cells[rowid,?4]).Value2?=?"'"?+?pa_name;
15?????????????????????????????????index?=?k?-?3;
16?????????????????????????????????rowid?=?k;
17?????????????????????????????????k--;
18?
19?????????????????????????????}
20?????????????????????????????//退出循環時合并最后一個項目的標段
21?????????????????????????????wksheet.get_Range(wksheet.Cells[rowid,?4],?wksheet.Cells[k?-?1,?4]).Merge(Missing.Value);
22?????????????????????????????wksheet.get_Range(wksheet.Cells[rowid,?4],?wksheet.Cells[rowid,?4]).Value2?=?"'"?+?pa_name;
23?????????????????????????????tick?=?DateTime.Now.ToString("yyyyMMddhhmmss");
24?????????????????????????????save_path?=?temp_path?+?"\\"?+?tick?+?"保證金收退情況表.xls";
25?????????????????????????????Session["BailBackID"]?=?tick?+?"保證金收退情況表.xls";
26?????????????????????????????Session["_BailBack"]?=?"true";
27?????????????????????????????workbook.SaveAs(save_path,?Missing.Value,?Missing.Value,?Missing.Value,?Missing.Value,?Missing.Value,?Excel.XlSaveAsAccessMode.xlNoChange,?Missing.Value,?Missing.Value,?Missing.Value,?Missing.Value,?Missing.Value);
28?????????????????????????????excelOperate.Dispose(worksheet,?workbook,?app);//關閉Excel進程
29?????????????????????????????//DownLoad(save_path);
30?????????????????????????????//Page_Close(); 當然,上面的操作中會進行好幾次循環,在性能方面不太可取,園子里的兄弟也許會有更好的方法,小弟不吝賜教了
下面我們看下幾個效果圖:





(注意:這里提示的導出數據是指從數據庫成功取出數據,還沒有操作EXCEL對象,剛開始已經說過了,當然這個提示文字換成其它的也可以)




整個過程采用AJAX提示的,一來不刷新,二來導出時間比較長的話,可以給客戶一個良好的體驗效果,否可,用戶一點導出按鈕,半天沒反應也沒提示,客戶就覺得怎么這么慢的,是不是你們程序有問題,指責一大堆,有了這么些交互提示信息,讓客戶多等幾分鐘也能承受。

???? 3.生成的表格包含多個sheet的操作,比如下面一種情況


繪制這張表的要求是根據選擇某年的幾月到幾月,生成這個幾個月的一個綜合情況的sheet,然后分別生成這幾個月的單獨的sheet表,生成上面表的模板,包含兩個sheet ,一個綜合月份的sheet和一個單獨月份的sheet,因為單獨月份的sheet表現形式都是一樣的,我們可以根據選擇的月份個數Copy幾個sheet就可以了
?1??Workbooks?workbooks?=?app.Workbooks;
?2?
?3?????????????????????????????_Workbook?workbook?=?workbooks.Add(template_path?+?"\\招標單位年度招標情況逐月統計表.xls");
?4?????????????????????????????Sheets?sheets?=?workbook.Worksheets;
?5?????????????????????????????_Worksheet?Yearsheet?=?(_Worksheet)sheets.get_Item(1);
?6?????????????????????????????_Worksheet?worksheet?=?(_Worksheet)sheets.get_Item(2);
?7?????????????????????????????if?(worksheet?==?null)
?8?????????????????????????????{
?9?????????????????????????????????return;
10?????????????????????????????}
11?????????????????????????????for?(int?i?=?1;?i?<?monthCount;?i++)
12?????????????????????????????????worksheet.Copy(Missing.Value,?workbook.Worksheets[2]);//月統計工作薄
Yearsheet的操作就不說了,和前面幾個一樣操作,關鍵是月份的sheet的生成,其實就是循環操作get_Item(i),代碼如下
?1??//每月詳細統計
?2?
?3?????????????????????????????int?item_id?=?2;
?4?????????????????????????????rowNum?=?0;?book_Amount?=?0;?index?=?0;
?5?????????????????????????????bid_Amount?=?"";?bidser_Amount?=?"";?agent_Amount?=?0;//清空變量
?6?????????????????????????????_Worksheet?ws?=?null;
?7?????????????????????????????for?(int?i?=?0;?i?<?tableMM.Rows.Count;?i++)
?8?????????????????????????????{
?9?????????????????????????????????rowNum++;
10?????????????????????????????????Month?=?tableMM.Rows[index]["DATE_MONTH"].ToString();
11?????????????????????????????????if?(tableMM.Rows[i]["DATE_MONTH"].ToString()?==?Month)
12?????????????????????????????????{
13?????????????????????????????????????ws?=?(_Worksheet)sheets.get_Item(item_id);
14?????????????????????????????????????ws.Cells[3?+?rowNum?-?1,?1]?=?rowNum;
15?????????????????????????????????????ws.Cells[3?+?rowNum?-?1,?2]?=?tableMM.Rows[i]["PROJNO"];
16?????????????????????????????????????ws.Cells[3?+?rowNum?-?1,?3]?=?tableMM.Rows[i]["PROJNAME"];
17?????????????????????????????????????ws.Cells[3?+?rowNum?-?1,?4]?=?tableMM.Rows[i]["BID_TYPE"];
18?????????????????????????????????????ws.Cells[3?+?rowNum?-?1,?5]?=?tableMM.Rows[i]["BID_MODE"];
19?????????????????????????????????????ws.Cells[3?+?rowNum?-?1,?6]?=?tableMM.Rows[i]["OPENDT"];
20?????????????????????????????????????ws.Cells[3?+?rowNum?-?1,?7]?=?tableMM.Rows[i]["OPENADDRESS"];
21?????????????????????????????????????ws.Cells[3?+?rowNum?-?1,?8]?=?tableMM.Rows[i]["BID_UNIT"];
22?????????????????????????????????????ws.Cells[3?+?rowNum?-?1,?9]?=?tableMM.Rows[i]["NOTICE_NO"].ToString().Replace("神華國貿",?"");
23?????????????????????????????????????ws.Cells[3?+?rowNum?-?1,?10]?=?tableMM.Rows[i]["BOOKAMOUNT"];
24?????????????????????????????????????ws.Cells[3?+?rowNum?-?1,?11]?=?tableMM.Rows[i]["BIDPRICE"]?+?"(萬"?+?tableMM.Rows[i]["CURRENCY"]?+?")";
25?????????????????????????????????????ws.Cells[3?+?rowNum?-?1,?12]?=?tableMM.Rows[i]["BIDSER_AMOUNT"]?+?"(萬"?+?tableMM.Rows[i]["CURRENCY"]+")";
26?????????????????????????????????????ws.Cells[3?+?rowNum?-?1,?13]?=?tableMM.Rows[i]["AGT_AMOUNT"];
27?????????????????????????????????????ws.Cells[3?+?rowNum?-?1,?14]?=?"";
28?????????????????????????????????????ws.get_Range(ws.Cells[3?+?rowNum?-?1,?1],?ws.Cells[3?+?rowNum?-?1,?14]).Borders.Color?=?System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.Black);
29?????????????????????????????????????continue;
30?????????????????????????????????}
31?
32?????????????????????????????????ws.Cells[1,?1]?=?year?+?""?+?bidName?+?GetMonth(Month)?+?"月份招標項目情況一覽表";
33?
34?????????????????????????????????//每月合計
35?????????????????????????????????sql?=?"?SELECT?CURRENCY,?NVL(SUM(BIDPRICE),0)?AS?BIDPRICE,NVL(SUM(BOOKAMOUNT),0)?AS?BOOKAMOUNT,NVL(SUM(BIDSER_AMOUNT),0)?AS?BIDSER_AMOUNT,NVL(SUM(AGT_AMOUNT),0)?AS?AGT_AMOUNT?FROM?IBS_V_BID_MONTHLY_STAT"?+?SqlFilter?+
36????????????????????????????????????????????"?AND?DATE_YEAR?='"?+?year?+?"'?AND?COMPANY_ID="?+?biderID?+?"?AND?DATE_MONTH?='"?+?Month?+?"'"?+
37????????????????????????????????????????????"?GROUP?BY?CURRENCY";
38?????????????????????????????????System.Data.DataTable?dt1?=?OracleHelper.RetDataTable(sql);
39?????????????????????????????????for?(int?m?=?0;?m?<?dt1.Rows.Count;?m++)
40?????????????????????????????????{
41?????????????????????????????????????bid_Amount?+=?dt1.Rows[m]["BIDPRICE"]?+?"(萬"+dt1.Rows[m]["CURRENCY"]?+?")\r\t";
42?????????????????????????????????????book_Amount?+=?float.Parse(dt1.Rows[m]["BOOKAMOUNT"].ToString());
43?????????????????????????????????????bidser_Amount?+=?dt1.Rows[m]["BIDSER_AMOUNT"]?+?"(萬"?+?dt1.Rows[m]["CURRENCY"]?+?")\r\t";
44?????????????????????????????????????agent_Amount?+=?float.Parse(dt1.Rows[m]["AGT_AMOUNT"].ToString());
45?????????????????????????????????}
46?
47?????????????????????????????????ws.Cells[3?+?rowNum?-?1,?3]?=?"合??計";
48?????????????????????????????????ws.Cells[3?+?rowNum?-?1,?10]?=?book_Amount;
49?????????????????????????????????ws.Cells[3?+?rowNum?-?1,?11]?=?bid_Amount;
50?????????????????????????????????ws.Cells[3?+?rowNum?-?1,?12]?=?bidser_Amount;
51?????????????????????????????????ws.Cells[3?+?rowNum?-?1,?13]?=?agent_Amount;
52?????????????????????????????????ws.get_Range(ws.Cells[3?+?rowNum?-?1,?1],?ws.Cells[3?+?rowNum?-?1,?14]).Borders.Color?=?System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.Black);
53?????????????????????????????????ws.Name?=?GetMM(Month);
54?
55?????????????????????????????????item_id++;
56?????????????????????????????????index?=?i;?//匯總下一個月份的招標項目
57?????????????????????????????????i--;
58?????????????????????????????????rowNum?=?0;?book_Amount?=?0;
59?????????????????????????????????bid_Amount?=?"";?bidser_Amount?=?"";?agent_Amount?=?0;//清空變量
60?????????????????????????????}
61?
62?????????????????????????????//跳出循環時進行最后一個月份的項目匯總

用的是oracle數據庫,所以上面那個sql語句。。。 呵呵

============================================================================================
上面大致說得就差不多了,因為是不斷循環的什么的,可能對于大的數據量讀寫來說,比較好性能,如果大家有什么更好的方法,可以指點下,為了彌補等待時間過長,所以才結合了AJAX來處理。

最后我把做的一個小demo的鏈接帖出來給大家,還有一些空模板和對應生成的數據表給大家對照看下,尤其相對復雜一些的表畫應該是能畫出來的,主要看大家采用什么樣的方法,能少循環一次就盡量少循環,呵呵~~~
?? http://www.justlike.com.cn/upfiles/template_xls.rar
?? http://www.justlike.com.cn/upfiles/ExcelFiles.rar
?? http://www.justlike.com.cn/upfiles/ExcelReportDemo.rar
(說明:最后彈出下載文件的一個頁面一直想讓其自動關掉,但是不行,如果不關掉,再點導出,不會彈出下載框,實際的處理中我們可以在導出旁邊放個下載按鈕,就像上面的效果圖里那樣,當然可以點導出的時候讓其在網頁中直接打開,點下載的時候再彈出下載框,但是直接打開的話,文件需要生成在虛擬目錄下,不太安全,呵呵~~,看實際情況處理了)

==========================================================================================
今天補充說明下,關于那個調用ajax回調的效果,有個地方用到了所謂的“ajax嵌套調用”,如下

?1??function?ExcelReportCallback(resp)
?2??{
?3???????if(resp.value?==?"OK")
?4???????{
?5????????????
?6??????????????$('tipMsg').innerHTML?=?"<img?border=\"0\"?src=\"images/s_progressbar.gif\"><font?color=#FF0000?style=font-weight:bold>準備導出數據,請稍等</font>";
?7??????????????setTimeout("RedirectUrl()",1000);//延時體驗??
?8???????}
?9???????else
10????????if(resp.value?==?"NO")
11????????{
12???????????$('tipMsg').innerHTML?=?"<font?color=#FF0000?style=font-weight:bold>沒有找到符合該查詢條件的數據</font>";
13???????????$('btnExcel').disabled?=?false;
14????????}
15???????else
16???????{
17???????????$('tipMsg').innerHTML?=?"<font?color=#FF0000?style=font-weight:bold>警告:導出數據出錯</font>";
18???????????$('btnExcel').disabled?=?false;
19???????}
20????????
21???????
22??}

?

?1?function?RedirectUrl()
?2??{
?3??????$('tipMsg').innerHTML?=?"<img?border=\"0\"?src=\"images/ajaxloading.gif\"><font?color=#7fffd4?style=font-weight:bold>正在讀寫報表文件,請稍后</font>";
?4?????????var?ajax?=?new?ajax_request("ExcelReport.aspx?flag=ReportByTemp&"+Math.random(),?"",?"",?ReportCallback);?
?5?????????function?ReportCallback(resp)
?6?????????{
?7?????????????if(resp.value?!=?"Error"?&&?resp.value?!="")
?8?????????????{
?9????????????????$('btnExcel').disabled?=?false;
10????????????????$('tipMsg').innerHTML?=?"<font?color=#FF0000?style=font-weight:bold>數據導出成功!</font>";
11????????????????Open("XLS_DownLoad.aspx?path="+resp.value);//window.location.href?=?resp.value;//
12?????????????}
13?????????????else
14?????????????{
15????????????????$('btnExcel').disabled?=?false;
16????????????????$('tipMsg').innerHTML?=?"<font?color=#FF0000?style=font-weight:bold>文件讀寫出錯,請檢查文件模板是否存在或對文件是否有讀寫權限!</font>";
17?????????????}
18?????????}
19?
20??}
21??
22??function?Open(url)?
23?{
24?????window.open(url,'newwindow','height=1,width=1,top=1500,left=1500,toolbar=no,menubar=no,scrollbars=yes,location=no,status=no')
25?}

ExcelReportCallback(resp)原本是一個回調函數,但是里面調用了一個RedirectUrl()方法,這個方法又包含了一個回調函數,這樣就形成了回調的嵌套,之所以這么做,是因為,第一個回調是處理從數據庫取出數據成功與否,如果成功了跳轉到畫EXCEL的頁面,這樣的話會出現一個空白頁等生成好后出現下載框,后來覺得是否可以嵌套一個回調來繼續一次異步操作,這樣就不會出現長時間等待的空白頁面了,而是生成好EXCEL后返回地址,或者可以返回一個文件名到XLS_DownLoad.aspx頁面直接下載,但是XLS_DownLoad.aspx也是要出現的,我嘗試過讓下載后這個頁面自動關閉,無賴做不到,所以把Open()方法里的數據值調得讓頁面不顯示,但是狀態欄還是有顯示的。

到這里算是寫完了,決定奢侈下,放到首頁下:),總覺得首頁的文章只有高手才能放,而且放到首頁也是一種奢侈,希望對園子里的某些人有一定的幫助吧~~

轉載于:https://www.cnblogs.com/gllgsoft/archive/2008/11/24/1339884.html

總結

以上是生活随笔為你收集整理的告别ASP.NET操作EXCEL的烦恼的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

国产在线观看h | 极品嫩模被强到高潮呻吟91 | 久久国产精品久久精品 | 激情六月婷婷久久 | 亚洲精品乱码久久久久久久久久 | 91久久电影| 国产精品mv在线观看 | 日韩一区视频在线 | 日韩精品一区二区三区三炮视频 | 免费网站色 | 一区二区久久久久 | av免费看网站 | 久久伦理 | 国产91成人在在线播放 | 色婷婷综合久久久中文字幕 | 在线中文视频 | 91 在线视频播放 | 日日夜夜精品免费观看 | 久久视频这里有精品 | 国产精品久久精品国产 | 97视频在线免费观看 | 黄色大片国产 | 中文av资源站| 女人18毛片90分钟 | 免费观看视频的网站 | 91av官网 | 久久久网| 国产手机视频在线 | 天天操天天艹 | 国产一区二区免费看 | 欧美一级免费在线 | 超碰成人网| 国产在线精品国自产拍影院 | 久久免费电影 | 国产精品久久久久久久久免费看 | www.色综合.com | 激情五月在线观看 | 成人网在线免费视频 | 国产日韩在线看 | 精品亚洲免费 | 欧美地下肉体性派对 | 久久免费高清 | 国产不卡一区二区视频 | 欧美成人a在线 | 在线小视频你懂的 | 久久综合九色综合97_ 久久久 | 在线观看av网站 | 91av电影在线| 91精品成人久久 | 粉嫩av一区二区三区入口 | 欧美精品一区二区三区一线天视频 | 婷婷5月色 | 在线观看国产区 | 天天夜操 | 开心激情五月网 | 一区二区三区在线免费观看 | 欧美91片| 天天综合视频在线观看 | 中文字幕专区高清在线观看 | 国产精品免费高清 | 日韩高清精品一区二区 | 99在线精品观看 | 日本久久久久久久久 | 欧美成人91| 不卡电影免费在线播放一区 | 国产字幕在线看 | 色视频在线观看 | 免费网址在线播放 | 一区二区三区四区五区在线 | 中文在线| av一级片在线观看 | 国内揄拍国内精品 | 91大神在线看| 久久大香线蕉app | 国产一级大片免费看 | 国产又粗又硬又长又爽的视频 | 国产精品黑丝在线观看 | 99色在线| 欧美一级片免费在线观看 | 天天综合网天天综合色 | 日日夜夜天天久久 | 国产精品久久二区 | 日韩av一区二区三区四区 | 国产精品videoxxxx | 日韩大片免费观看 | 91麻豆精品国产自产在线 | 天天操天天爱天天干 | 97精品超碰一区二区三区 | 日韩在线视频二区 | 在线免费观看欧美日韩 | 亚洲欧洲精品一区二区 | 偷拍精偷拍精品欧洲亚洲网站 | 激情久久网 | 日批在线看 | 亚洲情婷婷 | 久久成人一区二区 | 精品一区二区在线播放 | 久久99精品国产91久久来源 | av在线中文 | 激情综合网在线观看 | 国模一二三区 | 欧美激情视频久久 | 久久九精品 | 91精品国产综合久久婷婷香蕉 | 日本中文字幕一二区观 | 色鬼综合网 | 久久久国产精品久久久 | 国产日韩中文字幕 | 久久精品一区二 | 国精产品999国精产 久久久久 | 日本精油按摩3 | 99精品网站 | 97成人在线视频 | 国产精品专区在线观看 | 国产黄网站在线观看 | 午夜12点| 国产日韩中文字幕在线 | 午夜黄色一级片 | 免费在线观看av网站 | 婷婷福利影院 | 欧美另类tv| 色播六月天 | 综合在线观看色 | 久久亚洲区| 中文字幕 91 | 天天操天天干天天 | 青青久视频 | 中文字幕五区 | 精品亚洲成a人在线观看 | 欧美激情综合五月色丁香 | 国产黄色片免费看 | 九九热免费精品视频 | 天天舔夜夜操 | 超碰日韩 | www.精选视频.com | 99国产精品视频免费观看一公开 | 国产91精品在线播放 | 成人黄色电影在线观看 | 九九久久视频 | 精品国产乱码一区二 | 在线观看av小说 | www.色综合.com | 91在线区| 特级黄色一级 | 欧美极品少妇xbxb性爽爽视频 | 天天干天天干天天干 | 国产丝袜一区二区三区 | 天天爽天天做 | 国产成人精品亚洲a | 久久高清精品 | 国产在线色| 天天操天天添天天吹 | 欧美在线视频日韩 | 超碰在线免费福利 | 顶级欧美色妇4khd | 在线观看日本韩国电影 | www.人人干 | 欧美日韩视频免费 | 在线免费精品视频 | 国产视频 亚洲精品 | 在线视频 日韩 | 色99色 | 国产精品日韩欧美 | 狠狠狠干| 九九热免费精品视频 | 免费看av片网站 | 久久精品视频日本 | 日韩专区在线观看 | 国产日产精品一区二区三区四区的观看方式 | 91手机视频在线 | 天天操天天操天天操天天操 | 在线影院中文字幕 | 胖bbbb搡bbbb擦bbbb | 97在线精品国自产拍中文 | 久久久精品成人 | 欧美少妇bbwhd | 天天色天天射天天操 | 亚洲无人区小视频 | 99日韩精品 | 亚洲精品456在线播放第一页 | 成人黄色片免费看 | 成人午夜精品 | 国产精品毛片网 | 国产一区二区在线视频观看 | 一区三区在线欧 | 青草草在线视频 | 一级黄网 | 日韩精品视频免费看 | 丁香六月婷婷综合 | 成人在线你懂得 | 片网站 | av电影在线免费观看 | 久久国产精品色婷婷 | 最近免费中文视频 | 亚洲综合精品视频 | 五月婷婷,六月丁香 | 深爱婷婷久久综合 | 国产婷婷一区二区 | 五月天久久精品 | 521色香蕉网站在线观看 | 欧美一级久久 | 成人黄色一级视频 | av九九| 福利视频一区二区 | 久久线视频 | 五月婷婷黄色 | 在线观看午夜 | 久久成人国产精品一区二区 | 国产精品 日韩精品 | 国产亚洲免费观看 | 日韩精品一区二区三区水蜜桃 | 一级理论片在线观看 | 国产高清无av久久 | 久久综合操 | 精品91视频 | 国产高清无线码2021 | 三级黄在线 | 久久午夜鲁丝片 | 久99久精品 | 国产精品美女免费 | 中文字幕乱偷在线 | 午夜在线观看一区 | 久久精品免费电影 | 国产精品女主播一区二区三区 | 69国产盗摄一区二区三区五区 | 久热香蕉视频 | 久久99国产精品自在自在app | 日本不卡一区二区三区在线观看 | 丁香婷婷色综合亚洲电影 | 国产一级免费电影 | 久久久久国产一区二区三区 | 国产麻豆视频免费观看 | 91精品视频免费 | 国产日韩欧美精品在线观看 | 在线观看日本高清mv视频 | 黄色成人影院 | 五月激情姐姐 | 色噜噜在线观看视频 | av免费福利 | 涩涩伊人 | 中文字幕高清免费日韩视频在线 | 欧美日韩国产页 | 日本 在线 视频 中文 有码 | 在线99视频 | 美女网站色免费 | 国产麻豆果冻传媒在线观看 | 欧美日韩一级久久久久久免费看 | 视频在线观看国产 | 在线观看视频黄色 | 欧美成人影音 | 91视频a | 99r精品视频在线观看 | 久久久黄色 | 亚洲黑丝少妇 | 91丨九色丨丝袜 | 99re久久精品国产 | 免费久草视频 | 久久视频精品在线 | 中文字幕中文中文字幕 | 亚洲一区网站 | 日韩美女黄色片 | 久青草视频 | 午夜在线观看一区 | 四虎影视精品 | 久久不卡日韩美女 | 精品视频国产 | 日本久草电影 | 狠狠色伊人亚洲综合网站色 | 天天草天天干天天 | 国产婷婷视频在线 | 九九九九九九精品 | 国产理论免费 | 国产精品久久久免费看 | 97精品国产 | 91亚洲欧美| 欧美在线观看禁18 | 欧美另类亚洲 | 二区三区av | 国产粉嫩在线 | 午夜视频在线观看一区二区三区 | 欧美一级黄大片 | 美女黄色网在线播放 | 手机成人在线 | 亚洲精品在线观看中文字幕 | 深夜免费小视频 | 久久久网 | 三上悠亚一区二区在线观看 | 久久久99精品免费观看 | 日本爱爱免费 | 天天操天天射天天插 | 狠狠88综合久久久久综合网 | 一级黄色免费网站 | 亚洲一区二区视频在线 | av丁香花| 美女视频黄网站 | 91福利社区在线观看 | 五月激情久久 | 国产在线久久久 | 精品国产一二三四区 | 亚洲精品高清在线观看 | 91精品专区| 国产91探花 | 中文字幕三区 | 伊人首页 | 亚洲精品在线网站 | 国产视频999 | 国产91勾搭技师精品 | 深爱五月激情五月 | 97精品国产aⅴ | 欧美日韩视频精品 | 欧美精品视 | 日韩精品中文字幕在线播放 | 日本成址在线观看 | 免费激情网 | 国产精品1区2区 | 国产精品久久久久久久久久白浆 | 亚洲天堂网视频在线观看 | 香蕉网在线 | 色av网站| 岛国精品一区二区 | 亚洲精品456在线播放第一页 | 久久艹影院| 国产成人亚洲精品自产在线 | 91av蜜桃| 欧美极品少妇xxxxⅹ欧美极品少妇xxxx亚洲精品 | 欧美亚洲久久 | 综合久久久久久 | 久草在线免费播放 | www.日韩免费 | 日韩毛片在线播放 | 国产精品亚| 天堂黄色片| 久久免费电影网 | 日日爽天天爽 | 中文字幕亚洲欧美 | 国产视频一二区 | 视频在线99re| 亚洲精品美女久久久 | 狠狠婷婷 | 69国产盗摄一区二区三区五区 | 国际精品久久久久 | 精品久久一区 | 天天拍天天干 | 99r在线视频 | 国色天香在线观看 | 亚洲精品国产拍在线 | 久久久久国产精品免费 | 精品久久一区 | 日日麻批40分钟视频免费观看 | 日韩免费一级电影 | 中国一级特黄毛片大片久久 | 国产一区欧美二区 | 欧美一级小视频 | a级黄色片视频 | 91av播放 | 国产色综合天天综合网 | 成人久久久精品国产乱码一区二区 | 六月丁香婷婷久久 | 国产精品一区二区在线看 | 免费av在线网站 | 国产专区在线看 | 一区二区国产精品 | 色视频在线免费 | 精品国产成人 | 午夜精品一区二区三区视频免费看 | 久久久久久久久免费视频 | 日韩视频www | 国产视频久久 | av在线电影网站 | 欧美性生活一级片 | 欧美日韩xxxxx | 成人va视频 | 夜夜天天干| 日韩免费在线观看 | 99精品99| 久久久高清免费视频 | av成人免费在线看 | 黄网站污 | 成人精品一区二区三区中文字幕 | 久久专区 | 中文字幕区 | 不卡av在线免费观看 | 国产精品久久一 | 韩国三级在线一区 | 69久久夜色精品国产69 | 欧美色婷| 亚州性色 | 久久久久久免费毛片精品 | 波多野结衣精品在线 | 97精品超碰一区二区三区 | 国产不卡毛片 | 国产人成一区二区三区影院 | 欧美精品久久久久久久 | 国内精品久久影院 | 麻豆传媒视频在线免费观看 | 人人爽人人乐 | 婷婷综合 | 成人av一二三区 | 中文字幕在线看视频国产 | 精品一二三区视频 | 午夜色大片在线观看 | 亚洲高清资源 | 日韩欧美在线免费观看 | 999久久久免费视频 午夜国产在线观看 | 国产亚洲视频中文字幕视频 | 中文字幕日韩电影 | 欧美激情第一页xxx 午夜性福利 | 亚洲免费公开视频 | 久久综合视频网 | 欧美做受69 | 久久99精品久久久久久秒播蜜臀 | 色的网站在线观看 | 麻豆极品| 91福利在线观看 | 久久精品亚洲综合专区 | 黄色电影网站在线观看 | 精品久久电影 | 国产一级片免费播放 | av动图| 午夜 久久 tv| 美女久久99 | 91成人午夜 | 中文字幕中文字幕中文字幕 | 麻豆视屏 | 在线观看网站av | 久久成人国产精品入口 | 久久 在线 | 99久久国产免费免费 | 午夜久久影院 | 99精品国产在热久久 | 日本资源中文字幕在线 | 国产精品午夜在线观看 | 成人中文字幕av | 免费看黄在线网站 | 天天摸天天弄 | 91免费的视频在线播放 | 国产精品九九久久99视频 | 欧美性做爰猛烈叫床潮 | 四虎影视精品 | 午夜国产一区 | 91精品国产电影 | 亚洲一区精品二人人爽久久 | 日韩久久精品一区二区三区 | 天天操夜夜曰 | 福利视频网站 | 欧美 日韩 国产 中文字幕 | 激情五月av| 国产精品18久久久久久vr | 久二影院 | 国产精品一区二区三区在线 | 天天色婷婷 | 国产伦精品一区二区三区无广告 | 综合影视| 久久久久久久99精品免费观看 | 一区二区三区在线免费播放 | 色av男人的天堂免费在线 | 91桃花视频 | 国产麻豆精品久久一二三 | 久久久久久久久久网 | 在线观看香蕉视频 | www色片 | 国产精品区在线观看 | 日本在线观看黄色 | 国产一区免费观看 | 亚洲欧洲在线视频 | 久草a在线 | 97精品免费视频 | 91成人破解版 | 久久理论影院 | 日日操夜夜操狠狠操 | 久久一区二区三区日韩 | 四虎小视频 | 色婷婷88av视频一二三区 | 成人蜜桃网 | 国产精品综合久久久 | 天天亚洲 | 黄色91免费观看 | 美女久久久久久久久久久 | 日韩在线网址 | 黄网站污 | 久久午夜鲁丝片 | 欧美巨大荫蒂茸毛毛人妖 | 国产精品18久久久久久vr | 亚洲伦理电影在线 | 日韩av电影免费观看 | 久久久久久在线观看 | 久久久一本精品99久久精品66 | 97超碰人人| 国产在线观看高清视频 | 婷婷av综合 | 欧美日韩91 | 二区三区视频 | 国产视频1区2区3区 久久夜视频 | 18pao国产成视频永久免费 | 国产精品9999 | 91精品导航 | 欧美一二三视频 | 久久综合天天 | 天天插狠狠插 | 成人a免费视频 | 婷婷色中文字幕 | av大全在线观看 | 深夜成人av | 久久久久久久精 | 中文字幕久久久精品 | 日韩电影一区二区三区 | 久久精品美女视频网站 | 久久免费国产视频 | 欧美精彩视频在线观看 | 天堂久久电影网 | 国内精品久久久久久久 | 正在播放亚洲精品 | 国内精品久久久久久久影视麻豆 | av一区在线播放 | 欧美日韩二三区 | 天天草天天干 | 久久久久久片 | 日日日操 | 国产91精品一区二区麻豆网站 | 国产精品一区二区三区视频免费 | av资源免费在线观看 | 国产亚洲激情视频在线 | 日韩在线视 | 国产美女精品人人做人人爽 | 久99久精品视频免费观看 | 久久国产精品电影 | 91精品国产成人 | 国产精品久久在线 | 久久综合亚洲鲁鲁五月久久 | 91免费在线 | 1024手机基地在线观看 | 黄色电影网站在线观看 | 日韩和的一区二在线 | 欧美日韩三级 | 亚洲一区视频在线播放 | 国产高清在线观看av | 免费国产在线精品 | 日韩黄色在线 | 国产高清福利在线 | 天天精品视频 | 国产高清视频免费在线观看 | 欧美精品久久天天躁 | 深夜激情影院 | 91在线中字| 精品视频在线视频 | 久草在线视频国产 | 91久久爱热色涩涩 | 波多野结衣视频一区 | 99精品欧美一区二区 | 欧洲激情综合 | 久草在线精品观看 | 国产又粗又猛又爽又黄的视频免费 | 免费av网站在线看 | 久久黄视频 | 国产精品免费久久久久影院仙踪林 | 日韩一区二区免费在线观看 | 国产精品18久久久久久久久 | 久久a久久 | 一区二区三区免费播放 | 久久久精品成人 | 日韩欧美电影在线观看 | 日韩黄色大片在线观看 | 91最新在线视频 | 日韩最新av在线 | 91片黄在线观 | 精品九九九九 | 色婷婷www| 久久综合综合久久综合 | 深爱综合网 | 久久久久亚洲精品男人的天堂 | 9在线观看免费高清完整版在线观看明 | 一区二区精品在线视频 | 精品国产1区 | 99视频偷窥在线精品国自产拍 | 在线 欧美 日韩 | 国产午夜精品一区二区三区在线观看 | 国色天香第二季 | 三级视频国产 | 偷拍福利视频一区二区三区 | 97视频免费在线观看 | 伊人影院99 | 欧美二区视频 | 亚洲最新av网址 | 久久久人人爽 | 手机色在线| 99久久er热在这里只有精品66 | 免费看黄20分钟 | 久久久久久久久久电影 | 欧美日韩免费在线观看视频 | 精品亚洲一区二区 | 国产色影院 | 一区二区三区四区五区在线 | 日韩美在线观看 | 色婷婷狠狠五月综合天色拍 | 中文字幕国产在线 | 高清免费av在线 | 黄网站www| 黄色成人av | 99精品国自产在线 | 色婷婷狠狠五月综合天色拍 | 黄色软件在线看 | 亚洲最新合集 | 狠狠的日日| 色婷婷久久久综合中文字幕 | 免费成人黄色 | 丰满少妇高潮在线观看 | 久久久久综合精品福利啪啪 | 久草视频在线免费播放 | 日日狠狠 | 亚洲激情一区二区三区 | 手机看片午夜 | 91av99 | 伊人久久一区 | 久久精品伊人 | 亚洲精品视频www | 狠狠色噜噜狠狠狠 | 欧美一级日韩免费不卡 | 国产视频1区2区3区 久久夜视频 | 欧美韩国日本在线观看 | 国产成人久久av免费高清密臂 | 又黄又爽又刺激视频 | 欧美在线视频精品 | 香蕉久久久久久久 | 日产乱码一二三区别在线 | www.在线观看av | 欧美日韩91| av高清免费在线 | 最近2019中文免费高清视频观看www99 | 欧美另类成人 | 丁香婷婷激情啪啪 | 亚洲国产网站 | 天堂av在线免费 | av免费观看网址 | 日韩大陆欧美高清视频区 | 久久在视频 | 亚洲欧美国产精品va在线观看 | 亚洲免费在线视频 | 国产专区视频 | 久草在线免费在线观看 | 亚洲国产精久久久久久久 | av成人黄色| 久久久久免费精品国产小说色大师 | 五月综合色婷婷 | 国产精品久久久久久久久久尿 | 一区二区不卡 | 91九色视频观看 | 成人av高清在线 | 日韩视频免费观看高清完整版在线 | 国产青春久久久国产毛片 | 亚洲欧美视频一区二区三区 | 国产日产在线观看 | 麻豆国产网站 | 亚洲成人黄色 | 国产一级免费在线观看 | 在线观看视频一区二区三区 | 中文字幕一区在线观看视频 | 又黄又刺激又爽的视频 | 3d黄动漫免费看 | 欧美夫妻生活视频 | 中文字幕视频一区二区 | 久久久国产精品视频 | 天天干天天射天天操 | 91久久偷偷做嫩草影院 | 很黄很污的视频网站 | 日韩一级黄色av | 国产成人精品一区二 | 亚洲黑丝少妇 | 久久久久久久久久久免费视频 | 夜夜夜 | 精品电影一区 | 国产中年夫妇高潮精品视频 | 国产一区在线免费观看视频 | 五月婷婷综合久久 | 亚洲精品动漫在线 | 丝袜美腿av | 免费在线观看中文字幕 | 91亚洲精品久久久蜜桃 | 久久视频免费在线 | 国产精品久久久久一区二区 | 日韩高清在线一区二区 | 日本黄网站 | 二区三区精品 | 久久a国产 | 在线观看的av网站 | 91av视频在线观看 | av黄色免费网站 | 就要色综合 | 狠狠干夜夜爱 | 国产123区在线观看 国产精品麻豆91 | 中文字幕在线乱 | 在线欧美小视频 | 99久久精品午夜一区二区小说 | 2021国产视频 | 精品视频资源站 | va视频在线| 国产资源中文字幕 | 91看片麻豆 | 在线观看免费观看在线91 | av天天澡天天爽天天av | 亚洲精品美女久久久 | 欧美日韩性 | 色吊丝在线永久观看最新版本 | 国产亚洲精品久久久久5区 成人h电影在线观看 | 久久躁日日躁aaaaxxxx | 99久久爱| 精品色综合 | 国内久久久久 | 成人在线免费小视频 | 91天堂影院 | 中文字幕在线看视频 | 亚洲综合激情网 | 91桃色免费观看 | 欧美亚洲成人xxx | 五月婷在线观看 | 久久不卡电影 | 成人久久久电影 | 在线免费观看亚洲视频 | 久久高清毛片 | 夜夜躁狠狠躁日日躁视频黑人 | 亚洲黄色网络 | 在线免费观看成人 | 日韩欧美国产精品 | 色狠狠一区二区 | 免费视频黄 | 制服丝袜天堂 | 在线看片成人 | 美女性爽视频国产免费app | 2024国产在线 | 97视频人人 | 丁香六月婷婷综合 | 亚洲精品91天天久久人人 | 亚洲最新av网站 | 亚洲成人动漫在线观看 | 日韩视频www | 欧美成人基地 | 欧美精品久久人人躁人人爽 | 深爱开心激情网 | 久色 网| 91免费观看国产 | 久久久亚洲精华液 | 亚洲综合在线一区二区三区 | 人人干狠狠干 | 九九热免费精品视频 | 在线观看免费视频 | 一区二区三区免费看 | 一级黄色片毛片 | 蜜臀久久99精品久久久久久网站 | 亚洲一区免费在线 | 91麻豆国产福利在线观看 | 最新日本中文字幕 | 手机看片中文字幕 | 免费日韩一区二区三区 | 精品一区二区精品 | 射综合网 | 国产高清av免费在线观看 | 亚洲闷骚少妇在线观看网站 | 99久久精品免费视频 | 91久久奴性调教 | 久久久高清 | 日本精品二区 | 8x成人在线 | 日韩av成人在线观看 | 久久久高清视频 | 婷婷午夜 | 国产喷水在线 | 国产精品一区在线观看你懂的 | 中文字幕字幕中文 | 国产精品毛片久久 | 欧美日韩p片 | 欧美视频www| 国产成人99久久亚洲综合精品 | 激情五月在线视频 | 久久色网站 | 久操伊人| 国产一区二区影院 | 在线国产日本 | 日韩专区中文字幕 | www.xxxx变态.com| 久久成人高清视频 | 国产精品对白一区二区三区 | 99国产精品免费网站 | 九九爱免费视频在线观看 | 国产91精品一区二区麻豆网站 | 911av视频| 久久深夜福利免费观看 | 久久69精品久久久久久久电影好 | 欧美一区,二区 | 国产黑丝一区二区 | 久久久网页 | 五月天色网站 | 91欧美精品| 中文字幕在线播放视频 | 97在线公开视频 | 麻豆影视在线免费观看 | 国产三级午夜理伦三级 | av成人免费在线 | av高清网站在线观看 | 久草在线视频国产 | 亚洲欧美视频在线观看 | 婷婷激情五月综合 | 日韩理论在线观看 | 日本性生活一级片 | 亚洲日本在线视频观看 | 色婷婷综合久久久久 | 果冻av在线 | 欧美精品在线观看免费 | www.人人草| 美女久久99 | 国产成人精品999 | 国产一二区在线观看 | 欧美另类z0zx | www色,com| 网站在线观看你们懂的 | 亚州人成在线播放 | 在线免费观看的av | 免费成人av在线 | 高清国产一区 | 日本黄色免费网站 | 午夜精品一区二区三区免费 | 日韩精品不卡在线观看 | 国产精品一区二区三区电影 | 久久久在线免费观看 | 久久夜靖品 | 天天操比 | 亚洲婷婷网 | 国产视频在线一区二区 | 国产精品一区二区电影 | 一级片免费在线 | 久久黄网站 | 国产精品 日韩精品 | 欧美a级片免费看 | 欧美影片 | 一区二区三区在线电影 | 欧美精品久久久久久久久免 | www.久久久| 国产成人精品综合久久久久99 | 日韩三级一区 | 欧美天天射| 日本久久久久久久久久久 | 亚洲精品久久久久999中文字幕 | 99精彩视频在线观看免费 | www.成人久久 | 亚洲综合精品在线 | 超碰在线97免费 | 色五丁香 | 欧美日韩国产在线精品 | 999成人免费视频 | 黄色在线免费观看网站 | 久久av影视 | 九九视频精品在线 | 欧美 日韩 国产 中文字幕 | 亚洲精品456在线播放 | 91人人揉日日捏人人看 | 操操爽| 久久久午夜电影 | 亚州av免费 | 久久久久久毛片精品免费不卡 | 天天摸夜夜添 | ,午夜性刺激免费看视频 | 久久久精品 | 性色av免费在线观看 | 日韩乱理 | 91禁在线看 | 综合色站导航 | 亚洲欧美偷拍另类 | 中文字幕在线观看的网站 | 国产中文字幕亚洲 | 九九热精品视频在线播放 | 激情综合五月婷婷 | 国产日韩欧美在线观看视频 | 丁香六月久久综合狠狠色 | 狠狠狠色 | 又黄又色又爽 | 免费观看成人 | 天天碰天天操 | 国产精品国产三级国产aⅴ9色 | 国产精品一二 | 日韩在线网 | 久久亚洲成人网 | 最近中文字幕 | 中文字幕永久在线 | 天天干天天摸天天操 | 国产一区视频在线 | www狠狠操| av黄网站 | 日韩欧美区 | 激情中文字幕 | 91插插影库 | av大片网站 | 日韩v在线91成人自拍 | 在线国产一区二区三区 | 国产精品mm | 亚洲va在线va天堂va偷拍 | 国产亚洲成人网 | 久久久久久久久久毛片 | 99久久日韩精品视频免费在线观看 | 日韩精品亚洲专区在线观看 | 九九九视频精品 | 免费视频黄色 | 国产高清日韩 | 91精品免费 | 日本精品中文字幕在线观看 | 日韩免费在线视频观看 | 国产成人一区二区三区影院在线 | 免费av福利 | 91av99| 麻豆一二三精选视频 | 成人黄在线观看 | a视频免费看 | 婷婷网址| 午夜成人免费电影 | 久精品视频免费观看2 | 亚洲视频h| 韩国av永久免费 | 欧美精品一级视频 | 国产一区在线免费 | 久视频在线播放 | 日本女人的性生活视频 | 国产成人高清av | 国产成人黄色av | 制服丝袜天堂 | 久久久性 | 国产a国产a国产a | 欧美一级免费片 | 五月天网页| 国产一级片免费视频 | 国产另类xxxxhd高清 | 激情五月综合网 | 日韩精品一区二区三区不卡 | 久久国产色 | 国产精品免费在线观看视频 | 日本精品久久久久 | 国产亚洲va综合人人澡精品 | 日韩成人精品一区二区 | 亚洲伊人成综合网 | 制服丝袜一区二区 | 日韩欧美xxxx| 久久精品79国产精品 | 亚洲国产人午在线一二区 | 高清不卡一区二区三区 | 国产视频一区二区在线观看 | 日韩免费中文 | 日韩av美女 | 日韩一区二区三区视频在线 | 欧美黑人性猛交 | 国产天天爽 | a级一a一级在线观看 | 久久久久久久久久毛片 | 国产一区二区三区视频在线 | 国产精品乱码在线 | 91热视频 | 69中文字幕| 456免费视频| 2018亚洲男人天堂 | 狠狠狠色狠狠色综合 | 综合网色 | 蜜桃久久久 | 四虎成人精品永久免费av | 亚洲91网站 | 99久久99久久免费精品蜜臀 | 精品一区二区三区电影 | 4438全国亚洲精品观看视频 | 亚洲综合色视频在线观看 | 中文字幕免费看 | 国产色秀视频 | 精品99在线视频 | 成人试看120秒 | 波多野结衣视频一区 | 中文字幕亚洲综合久久五月天色无吗'' | 国产黄色高清 | 91手机在线看片 | 深爱开心激情网 | 国产视频综合在线 | 亚洲欧洲视频 | 久久精品久久精品久久 | 午夜视频在线网站 | 日韩中文字幕91 | 狠狠操影视 | 日韩精品一区二区在线 | 欧美午夜剧场 | 99一区二区三区 | 四虎视频| 欧美久久电影 | 久久1电影院 | 欧美少妇xx | 久久国产乱 | 日韩av在线资源 | 四虎成人免费影院 | 国产在线专区 | 天天综合婷婷 | www蜜桃视频| 在线观看黄色免费视频 | 日韩高清免费无专码区 | 91亚洲精品乱码久久久久久蜜桃 | 玖玖爱在线观看 | 亚洲aⅴ久久精品 | 在线观看黄色的网站 | 久草在线视频精品 |