1. 技術(shù)要點(diǎn)
1.1. Excel試驗(yàn):
A. Excel嵌入網(wǎng)頁的方法。
1. 在后臺用流的方式返回給前臺頁面展現(xiàn);
2. 在后臺講Excel格式數(shù)據(jù)定好保存到本地,在前臺頁面用html標(biāo)簽加載展示;
B. Excel顯示格式的控制。
1. Excel單元格格式設(shè)置,默認(rèn)為常規(guī)類型;
2. 上下標(biāo)格式的控制;
3. 單元格水平垂直對齊方式;
4. 單元格邊框設(shè)置;
5. 單元格合并;
6. 字體設(shè)置,包括字體的顏色、大小、粗體、斜體、字體、下劃線等;
7. 凍結(jié)行列;
8. 公式欄的顯示與隱藏;
9. 行標(biāo)題和列表題的顯示與隱藏;
10. 網(wǎng)格的顯示與隱藏;
11. 水平滾動(dòng)條和垂直滾動(dòng)條的顯示與隱藏;
12. Sheet頁的顯示與隱藏;
C. 向Excel中填充數(shù)據(jù),并導(dǎo)出為臨時(shí)文件。
1.2. OWC試驗(yàn):
A. OWC組件在web頁面展示的方法。
1. 將OWC中Sheet導(dǎo)出為本地Excel文件,再將導(dǎo)出的文件呈現(xiàn)到Web頁面;
2. 后臺把配置好的Sheet直接以流文件方式返回到Web頁面展現(xiàn);
3. 用html標(biāo)簽將OWC展現(xiàn)在Web頁面,加載后臺程序?qū)С龅奖镜氐奈募▁ml、html、csv格式)來顯示數(shù)據(jù);
B. 在OWC中的電子表格類中填充數(shù)據(jù)的方法。
C. OWC中顯示數(shù)據(jù)格式的控制。
1. 電子表格外觀控制:工具欄的顯示、Office圖標(biāo)的顯示、列標(biāo)題的顯示、行標(biāo)題的顯示、水平滾動(dòng)條的顯示、垂直滾動(dòng)條的顯示、網(wǎng)格的顯示、網(wǎng)格顏色設(shè)置;
2. 單元格水平對齊方式;
3. 單元格垂直對齊方式;
4. 單元格合并;
5. 單元格字體設(shè)置:字體、字形、字號、字體顏色、字體加粗、下劃線(多種樣式);
6. 單元格邊框設(shè)置;
2. 主要模塊
2.1. Excel
1、Excel嵌入網(wǎng)頁的方法:
A、將后臺定制好的Excel文件在后臺用流的方式返回給前臺頁面展現(xiàn),代碼如下:
Response.ClearContent();
Response.ClearHeaders();
Response.ContentType = "application/vnd.ms-excel";
Response.AddHeader("Content-Disposition", "inline;filename='我的文件'");
Response.WriteFile(FileName);//FileName為Excel文件所在地址
Response.Flush();
Response.Close();
運(yùn)行效果:整個(gè)頁面都充滿了Excel。
B、在前臺頁面框架中直接加在,代碼:
<iframe id="myExcelHtml" src ="Nomarl.xls" width = "600" height ="300" align ="middle"> </iframe>
運(yùn)行效果:可隨意控制Excel在頁面的顯示位置。
2、 Excel顯示格式控制。
A、單元格格式設(shè)置,默認(rèn)為常規(guī)類型;Excel
代碼:
Excel.Range r = mySheet.get_Range(mySheet.Cells[1, 1], mySheet.Cells[DT.Rows.Count + 2, DT.Columns.Count - 3]);
//設(shè)置單元格格式為文本類型,文本類型可設(shè)置上下標(biāo)
r.NumberFormat = "@";
//設(shè)置單元格格式為數(shù)值類型,小數(shù)點(diǎn)后2位
r.NumberForma = "0.00_ "
//設(shè)置單元格格式為貨幣類型,小數(shù)點(diǎn)后2位
r.NumberForma = "¥#,##0.00;¥-#,##0.00"
//設(shè)置單元格格式為會計(jì)專用類型,小數(shù)點(diǎn)后2位
r.NumberForma = _"_ ¥* #,##0.00_ ;_ ¥* -#,##0.00_ ;_ ¥* ""-""??_ ;_ @_ "
//設(shè)置單元格格式為日期類型
r.NumberForma = "yyyy-m-d"
//設(shè)置單元格格式為時(shí)間類型
r.NumberForma = "[$-F400]h:mm:ss AM/PM"
//設(shè)置單元格格式為百分比類型,小數(shù)點(diǎn)后2位
r.NumberForma = "0.00%"
//設(shè)置單元格格式為分?jǐn)?shù)類型,分母為一位數(shù)
r.NumberForma = "# ?/?"
//設(shè)置單元格格式為科學(xué)技術(shù)類型,小數(shù)位數(shù)為2
r.NumberForma = "0.00E+00"
//設(shè)置單元格格式為特殊類型
r.NumberForma = "000000"
B、上下標(biāo)格式的控制;
代碼:
//控制輸出樣式為下標(biāo)
mySheet.get_Range(mySheet.Cells[i + 3, DT.Columns.Count - 3], mySheet.Cells[i + 3, DT.Columns.Count - 3]).get_Characters(a.Length + 1, b.Length).Font.Subscript = true;
//控制輸出樣式為上標(biāo)
mySheet.get_Range(mySheet.Cells[i + 3, DT.Columns.Count - 3], mySheet.Cells[i + 3, DT.Columns.Count - 3]).get_Characters(a.Length + b.Length + 1, c.Length).Font.Superscript = true;
C、 單元格水平垂直對齊方式;
代碼:
//單元格水平,垂直居中
r.HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter;
r.VerticalAlignment = Excel.XlVAlign.xlVAlignCenter;
上面代碼中,枚舉XLHAlign的值還有:
// 右對齊
xlHAlignRight,
// 左對齊.
xlHAlignLeft,
// 兩端對齊.
xlHAlignJustify,
// 分散對齊(縮進(jìn))
xlHAlignDistributed,
// 居中對齊
xlHAlignCenter,
// 依照數(shù)據(jù)類型對齊,常規(guī)
xlHAlignGeneral,
// 填充
xlHAlignFill,
// 跨列對齊.
xlHAlignCenterAcrossSelection = 7,
枚舉XLVAlign的值還有:
// 靠上對齊
xlVAlignTop,
//兩端對齊.
xlVAlignJustify = -4130,
//分散對齊.
xlVAlignDistributed,
//居中對齊.
xlVAlignCenter,
//靠下對齊.
xlVAlignBottom = -4107,
D、 單元格邊框設(shè)置;
代碼:
//設(shè)置邊框
Excel.Range r = mySheet.get_Range(mySheet.Cells[1, 1], mySheet.Cells[DT.Rows.Count + 2, DT.Columns.Count - 3]);
r.Borders.LineStyle = Excel.XlLineStyle.xlContinuous;
枚舉XlLineStyle中還有下面線形:
//沒邊框線
xlLineStyleNone,
//雙線.
xlDouble,
//點(diǎn)狀線.
xlDot,
//虛線.
xlDash,
//連續(xù)線.
xlContinuous,
//點(diǎn)線交互型
xlDashDot,
//兩點(diǎn)一線型
xlDashDotDot,
//斜線.
xlSlantDashDot,
E、單元格合并
用get_Range方法獲取要合并的單元格,再設(shè)置MergeCells屬性的值進(jìn)行合并。
代碼:
//合并單元格
myExcel.get_Range(myExcel.Cells[1, 1], myExcel.Cells[1,4]).MergeCells = true;
F、字體設(shè)置
先用get_Range方法選中要設(shè)置字體的某個(gè)單元格或者或者直接用get_Characters方法直接選中要設(shè)置的字符進(jìn)行設(shè)置;
代碼:
//加粗字體
myExcel.get_Range(myExcel.Cells[1, 1], myExcel.Cells[1, 1]).Font.Bold = true;
//設(shè)置字體大小
myExcel.get_Range(myExcel.Cells[1,1],myExcel.Cells[1,1]).Font.Size = 16;
//設(shè)置字體的顏色
myExcel.get_Range(myExcel.Cells[1, 1], myExcel.Cells[1, 1]).Font.ColorIndex = 3;
//設(shè)置字體
myExcel.get_Range(myExcel.Cells[1, 1], myExcel.Cells[1, 1]).Font.Name = "隸書";
//設(shè)置成斜體
myExcel.get_Range(myExcel.Cells[1, 1], myExcel.Cells[1, 1]).Font.Italic = true;
//設(shè)置下劃線
myExcel.get_Range(myExcel.Cells[1, 1], myExcel.Cells[1, 1]).Font.Underline = true;
G、凍結(jié)行列
用get_Range方法獲取單元格,再設(shè)置其Freezepanes屬性為true,就把該單元格右上方的行和列都凍結(jié)了,取消凍結(jié)將其值設(shè)為false即可。
//凍結(jié)行列
myExcel.get_Range(myExcel.Cells[3,1],myExcel.Cells[3,1]).Activate();
myExcel.ActiveWindow.FreezePanes = true;
H、 公式輸入欄的隱藏
//設(shè)置是否顯示Excel公式輸入欄,默認(rèn)為true
myExcel.DisplayFormulaBar = false;
I、 列標(biāo)題與行標(biāo)題的隱藏
//設(shè)置是否顯示行和列的標(biāo)題,默認(rèn)為true
myExcel.ActiveWindow.DisplayHeadings = false;
J、網(wǎng)格的隱藏
//設(shè)置是否顯示網(wǎng)格,默認(rèn)為true
myExcel.ActiveWindow.DisplayGridlines = false;
K、 水平、垂直滾動(dòng)條的隱藏
//設(shè)置是否顯示水平滾動(dòng)條
myExcel.ActiveWindow.DisplayHorizontalScrollBar = false;
//設(shè)置是否顯示垂直滾動(dòng)條
myExcel.ActiveWindow.DisplayVerticalScrollBar = false;
L、頁的隱藏Sheet
//設(shè)置是否顯示Sheet頁
myExcel.ActiveWindow.DisplayWorkbookTabs = false;
經(jīng)過格式設(shè)置以后,展示在頁面上的效果如下圖:
3、 向Excel中填充數(shù)據(jù),并保存為臨時(shí)文件
代碼:
Excel.Application myExcel = new Excel.Application();
//打開模板文件
myExcel.Application.Workbooks.Open(mode.FullName, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing);
//選中有數(shù)據(jù)的Cells
Excel.Workbook myBook = myExcel.Workbooks[1];
Excel.Worksheet mySheet = (Excel.Worksheet)myBook.Worksheets[1];
Excel.Range r = mySheet.get_Range(mySheet.Cells[1, 1], mySheet.Cells[DT.Rows.Count + 2, DT.Columns.Count - 3]);
r.Select();
//不單獨(dú)顯示Excel,最后在IE中顯示
myExcel.Visible = false;
//第一行為報(bào)表的標(biāo)題
myExcel.Cells[1, 1] = "用模板導(dǎo)出的報(bào)表";
//逐行寫入數(shù)據(jù),數(shù)組中第一行為報(bào)表的列標(biāo)題
for (int i = 0; i < DT.Columns.Count - 3; i++)
{
myExcel.Cells[2, 1 + i] = DT.Columns[i].Caption; ;
}
//在當(dāng)前目錄下指定一個(gè)臨時(shí)文件
string FileName = Server.MapPath("~") + """Temp.xls";
if (File.Exists(FileName))
{
File.Delete(FileName);
}
myExcel.Save(FileName);
mySheet.Cells.Clear() ;
//設(shè)置不出現(xiàn)保存提示框
myBook.Saved = true;
myExcel.Application.Workbooks.Close();
Excel嵌入網(wǎng)頁(二)
2.2. OWC組件
1、 OWC組建在Web頁面的展現(xiàn)方法;
A、將OWC中Sheet導(dǎo)出為本地Excel文件,再將導(dǎo)出的文件呈現(xiàn)到Web頁面;
代碼如下:
Sheet.Export(FileName, OWC11.SheetExportActionEnum.ssExportActionNone, OWC11.SheetExportFormat.ssExportHTML);//Sheet為OWC11中SpreadsheetClass類的對象
Response.ClearContent();
Response.ClearHeaders();
Response.ContentType = "application/vnd.ms-excel";
Response.AddHeader("Content-Disposition", "inline;filename='我的文件'");
Response.WriteFile(FileName);
Response.Flush();
Response.Close();
B、后臺把配置好的Sheet直接以文件方法返回到Web頁面展現(xiàn);
代碼如下:
Response.Clear();
Response.Buffer = true;
Response.ContentEncoding = System.Text.Encoding.Default;
//Response.Charset = "utf-8";
Response.ContentType = "application/vnd.ms-excel";
Response.Write(Sheet.HTMLData);
this.EnableViewState = false;
Response.End();
C、用html標(biāo)簽將OWC展現(xiàn)在Web頁面,加載后臺程序?qū)С龅奖镜氐奈募▁ml、html、csv格式)來顯示數(shù)據(jù);
代碼如下:
<object classid="clsid:0002E559-0000-0000-C000-000000000046" width="600" id="Spreadsheet1" height="200">
<param name="DataType" value="HTMLURL"/>
<param name="HTMLURL" value="<%=FileName%>"/>
</object>
2、 為OWC中的SpreadSheet類中填充數(shù)據(jù)的方法:
獲取Sheet的Cell或者ActiveCell,直接給里面填充數(shù)據(jù),代碼如下:
OWC11.SpreadsheetClass Sheet = new OWC11.SpreadsheetClass();
//第一行為報(bào)表的標(biāo)題
Sheet.ActiveCell[1, 1] = "用模板導(dǎo)出的報(bào)表";
//逐行寫入數(shù)據(jù),數(shù)組中第一行為報(bào)表的列標(biāo)題
for (int i = 0; i < DT.Columns.Count - 3; i++)
{
Sheet.Cells[2, 1 + i] = DT.Columns[i].Caption; ;
}
//為報(bào)表填充數(shù)據(jù)并設(shè)置顯示上下標(biāo)格式
for (int i = 0; i < DT.Rows.Count; i++)
{
for (int j = 0; j < DT.Columns.Count - 4; j++)
{
Sheet.ActiveCell[3 + i, 1 + j] = DT.Rows[i][j];
}
string a = DT.Rows[i][DT.Columns.Count - 4].ToString();
string b = DT.Rows[i][DT.Columns.Count - 3].ToString();
string c = DT.Rows[i][DT.Columns.Count - 2].ToString();
Sheet.ActiveCell[3 + i,DT.Columns.Count - 3] = a + b + c;
Sheet.Columns.AutoFit();
}
3、 OWC中數(shù)據(jù)顯示格式的控制:
A、 電子表格外觀控制:
是否顯示工具欄默認(rèn)值為 true
Sheet.DisplayToolbar = false;
取消顯示Office圖標(biāo)
Sheet.DisplayOfficeLogo = false;
是否顯示列標(biāo)題,默認(rèn)是true
Sheet.DisplayColumnHeadings = false;
是否顯示行標(biāo)題,默認(rèn)是true
Sheet.DisplayRowHeadings = false;
是否顯示水平滾動(dòng)條,默認(rèn)為true
Sheet.DisplayHorizontalScrollBar = false;
是否顯示垂直滾動(dòng)條,默認(rèn)為true
Sheet.DisplayVerticalScrollBar = false;
電子表格是否顯示網(wǎng)格,默認(rèn)為true
Sheet.DisplayGridlines = false;
設(shè)置行的顏色
for (int i = 1; i < DT.Columns.Count - 2; i += 2)
{
Sheet.get_Range(Sheet.Rows.Cells[i, 1], Sheet.Rows.Cells[i, DT.Columns.Count - 3]).Interior.set_ColorIndex(2);
}
做了上面的設(shè)置,效果如下圖:
B、 單元格水平對齊
用Get_Range方法獲取要設(shè)置的單元格,用set_HorizontalAlignment方法設(shè)置對齊方式;
代碼如下:
//單元格水平居中
Sheet.get_Range(Sheet.Cells[1, 1], Sheet.Cells[DT.Rows.Count + 2, DT.Columns.Count - 3]).set_HorizontalAlignment(OWC11.XlHAlign.xlHAlignCenter);
枚舉XLHAlign的值分別是:
//右對齊:
xlHAlignRight,
//左對齊:
xlHAlignLeft,
//居中對齊:
xlHAlignCenter,
//常規(guī)
xlHAlignGeneral1,
//填充對齊:
xlHAlignFill
C、 單元格垂直對齊
用Get_Range方法獲取要設(shè)置的單元格,用set_VerticalAlignment方法設(shè)置對齊方式;
代碼如下:
//單元格垂直居中
Sheet.get_Range(Sheet.Cells[1, 1], Sheet.Cells[DT.Rows.Count + 2, DT.Columns.Count - 3]).set_VerticalAlignment(OWC11.XlVAlign.xlVAlignCenter);
枚舉XLHAlign的值分別是:
// 靠上對齊
xlVAlignTop,
// 居中對齊
xlVAlignCenter,
// 靠下對齊
xlVAlignBottom
D、 單元格合并;
用get_Range方法先獲取要合并的單元格,再用set_MergeCells方法進(jìn)行合并。
代碼如下:
//標(biāo)題行合并單元格
Sheet.get_Range(Sheet.Cells[1, 1], Sheet.Cells[1, DT.Columns.Count - 3]).set_MergeCells(true);
E、 字體設(shè)置;
用get_Range方法先獲取要合并的單元格,設(shè)置該單元格字體:字體、字形、字號、字體顏色、字體加粗、帶下劃線(下劃線有多種樣式)等。
代碼如下:
//標(biāo)題行加粗字體
Sheet.get_Range(Sheet.Cells[1, 1], Sheet.Cells[1, 1]).Font.set_Bold(true);
//設(shè)置字體大小
Sheet.get_Range(Sheet.Cells[1, 1], Sheet.Cells[1, 1]).Font.set_Size(16);
//設(shè)置字體顏色
Sheet.get_Range(Sheet.Cells[1, 1], Sheet.Cells[1, 1]).Font.set_ColorIndex(3);
//設(shè)置字體
Sheet.get_Range(Sheet.Cells[1, 1], Sheet.Cells[1, 1]).Font.set_Name("隸書");
//設(shè)置字體為斜體
Sheet.get_Range(Sheet.Cells[1, 1], Sheet.Cells[1, 1]).Font.set_Italic(true);
//設(shè)置字體下劃線
Sheet.get_Range(Sheet.Cells[1, 1], Sheet.Cells[1, 1]).Font.set_Underline(OWC11.XlUnderlineStyle.xlUnderlineStyleDouble);
枚舉XLUnderlineStyle的值分別為:
xlUnderlineStyleNone,
xlUnderlineStyleDouble,
xlUnderlineStyleSingle,
xlUnderlineStyleSingleAccounting,
xlUnderlineStyleDoubleAccounting,
F、 添加邊框
用get_Range方法先獲取要添加邊框的單元格,用Borders.set_LineStyle方法設(shè)置邊框的類型即可。
代碼如下:
//畫邊線
Sheet.get_Range(Sheet.Cells[1, 1], Sheet.Cells[DT.Rows.Count + 2, DT.Columns.Count - 3]).Borders.set_LineStyle(OWC11.XlLineStyle.xlContinuous);
邊框類型有一下幾種:
xlLineStyleNone,
xlDot,
xlDash,
xlContinuous,
xlDashDot,
xlDashDotDot,
運(yùn)行效果如下:
3.2. OWC
服務(wù)端和客戶端都必須安裝 Microsoft Office Web Components,它可隨 Office 2003 一起安裝,或者,如果用戶的公司具有 Office 2003 站點(diǎn)許可證,則可以通過公司的 Intranet 下載 Office Web 組件,用戶還必須使用 Microsoft Internet Explorer 5.01 (Service Pack 2) 或更高版本。




