代码改变世界

asp.net 导出word格式的数据,检索 COM 类工厂中 CLSID 为 {000209FF-0000-0000-C000-000000000046} 的组件时失败

2009-11-05 22:06  Virus-BeautyCode  阅读(3386)  评论(0编辑  收藏  举报

  如果开发的ASP.NET应用需要导出数据到word中的话,需要注意一点,就是导出按钮,建议不要使用button或者linkbutton在后代码中直接处理,最好使用ashx一般处理程序,或者是ajax异步处理一下,要不然后台处理的话,每次只能点击一次,不能重复导出,要刷新页面才可以,使用ashx或者ajax就可以保证重复点击导出都没有问题。

  使用asp.net开发导出word格式的数据,如果是图片的话,需要先将图片下载到本地,然后从本地添加到word中,要不然你的文档拷贝到不能上网的地方就会出现红叉啊,路径问题。

  

 

下载图片到本地

  

  

 

 

添加图片到word

  还有啊,需要设置服务器的DCOM,是的网络用户有权限启动word程序才可以,否则会出错,类似:

  检索 COM 类工厂中 CLSID 为 {000209FF-0000-0000-C000-000000000046} 的组件时失败,原因是出现以下错误: 80070005

  检索 COM 类工厂中 CLSID 为 {000209FF-0000-0000-C000-000000000046} 的组件时失败,原因是出现以下错误: 8000401a 。
  设置可以参考下面的网址

  

  ASP.NET生成WORD文档服务器部署注意事项

  

1、Asp.net 2.0在配置Microsoft Excel、Microsoft Word应用程序权限时 error: 80070005 和8000401a 的解决总

2007-11-01 11:30


检索 COM 类工厂中 CLSID 为 {000209FF-0000-0000-C000-000000000046} 的组件时失败,原因是出现以下错误: 80070005。

控制面板-》管理工具-》组件服务-》计算机-》我的电脑-》DCom配置-》找到Microsoft Word文档
之后
单击属性打开此应用程序的属性对话框。 
单击"安全"选项卡,分别在"启动和激活权限"和"访问权限"组中选中"自定义",然后
自定义->编辑->添加ASP.NET账户和IUSER_计算机名

* 这些帐户仅在计算机上安装有 IIS 的情况下才存在。
13. 确保允许每个用户访问,然后单击确定。
14. 单击确定关闭 DCOMCNFG。

 


检索 COM 类工厂中 CLSID 为 {000209FF-0000-0000-C000-000000000046} 的组件时失败,原因是出现以下错误: 8000401a 。

运行dcomcnfg打开组件服务,

依次展开"组件服务"->"计算机"->"我的电脑"->"DCOM配置"

找到"Microsoft Excel应用程序"或"Microsoft Word应用程序",

右键打开属性对话框,点击"标识"选项卡,

点"下列用户",把管理员的用户密码正确填写进去...

点击"安全"选项卡,

依次把"启动和激活权限","访问权限","配置权限",都选择为自定义,

然后依次点击它们的编辑,把everyone添加进去,并加入所有的权限...

OK,解决此问题!
 

 

2、请设置web.config中的<identity impersonate="true" userName="administrator" password="51aspx"/>帐号和密码,否则会提示检索 COM 类工厂中 CLSID 为 {000209FF-0000-0000-C000-000000000046} 的组件时失败,原因是出现以下错误: 80070005。

例如

<system.web>

<identity impersonate="true" userName="administrator" password="chuguo186"/>

</system.web>

 文章出处:DIY部落(http://www.diybl.com/course/4_webprogram/asp.net/netjs/200824/98835.html)



Code

 

 

 

实用工具类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Kimbanx.UCS.ForeignStudentAdmin.Common
{
    
/// <summary>
    
/// 实用工具类
    
/// </summary>
    public class KUtility
    {
        
/// <summary>
        
/// 学生详表StudentDetailsTable的全部显示字段
        
/// </summary>
        public static string StudentDetailsTableFieldsString = "1-照片--2-姓名(中英全)--3-姓名(中英简)--4-职务--5-国家--6-文化程度--7-学号";
        
/// <summary>
        
/// 学生详表StudentDetailsTable的隐藏字段HiddenField的value
        
/// </summary>
        public static string StudentDetailsTableHiddenFieldValue = "1-2-3-4-5-6-7";

        
/// <summary>
        
/// 分割类似【1-姓名--2-年龄--3-工资】这样的字符串,将他们分割存放在字典中
        
/// </summary>
        
/// <param name="input">要分割的字符串</param>
        
/// <param name="tokenGroup">组分隔符--</param>
        
/// <param name="token">分隔符-</param>
        
/// <returns>Dictionary,键类型int,值类型string</returns>
        public static Dictionary<intstring> Split(string input, string tokenGroup, string token)
        {
            List
<int> list = new List<int>();
            Dictionary
<intstring> dic = new Dictionary<intstring>();
            
string[] strSplit = new string[] { tokenGroup };
            
string[] strSplit1 = new string[] { token };
            
string[] tokenGroups = input.Split(strSplit, StringSplitOptions.None);
            
string[] tokens = new string[2];
            
foreach (string group in tokenGroups)
            {
                tokens 
= group.Split(strSplit1, StringSplitOptions.None);
                dic.Add(
int.Parse(tokens[0]), tokens[1]);

            }
            
return dic;
        }

        
/// <summary>
        
/// 将Dictionary,键类型int,值类型string,组成成一个类似【1-姓名--2-年龄--3-工资】这样的字符串
        
/// </summary>
        
/// <param name="dic">Dictionary,键类型int,值类型string</param>
        
/// <returns>类似【1-姓名--2-年龄--3-工资】这样的字符串</returns>
        public static string Combine(Dictionary<intstring> dic)
        {
            StringBuilder sb 
= new StringBuilder();
            
foreach (int key in dic.Keys)
            {
                
if (sb.Length == 0)
                {

                    sb.Append(
string.Format("{0}-{1}", key.ToString(), dic[key]));

                }
                
else
                {
                    sb.Append(
string.Format("--{0}-{1}", key.ToString(), dic[key]));
                }
            }

            
return sb.ToString();
        }
    }
}

 

word操作代码,设置word格式
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Word11 = Microsoft.Office.Interop.Word;
using System.IO;
using System.Data;
using System.Net;
using Kimbanx.UCS.ForeignStudentAdmin.Common;
using System.Text;
using System.Reflection;

namespace Kimbanx.UCS.ForeignStudentAdmin.UserControl
{
    
public class StudentDetailsTable_Word_V2
    {
        
#region Variables
        
private string _strWordFilename = "";
        
private string _strWordFilepath;
        
private bool _wordVisible = false;
        
private Word11.Application _oWord;
        
private Word11.Document _oDoc;
        
object _missing = System.Reflection.Missing.Value;
        
object _oEndOfDoc = "\\endofdoc";

        
#endregion

        
#region Properties
        
public Word11.Application OApplication
        {
            
get { return _oWord; }
        }
        
public Word11.Document ODoc
        {
            
get { return _oDoc; }
        }
        
public string WordFilename
        {
            
get { return _strWordFilename; }
        }
        
public string WordFilepath
        {
            
get { return _strWordFilepath; }
        }

        
#endregion
        
#region Constrctor
        
public StudentDetailsTable_Word_V2()
        {
        }
        
public StudentDetailsTable_Word_V2(string strFullFilepath)
        {
            _oWord.Visible 
= false;
            _strWordFilename 
= Path.GetFileName(strFullFilepath);
            _strWordFilepath 
= Path.GetDirectoryName(strFullFilepath);

        }
        
public StudentDetailsTable_Word_V2(string strFullFilepath, bool overwrite)
        {
            _strWordFilename 
= Path.GetFileName(strFullFilepath);
            _strWordFilepath 
= Path.GetDirectoryName(strFullFilepath);
            _oWord.Visible 
= _wordVisible;
            
if (overwrite || !File.Exists(strFullFilepath))
            {

            }
            
else
            {
                
this.Open(strFullFilepath);
            }
        }
        
#endregion

        
#region  Method
        
public void Open(string strFilepath)
        {
            
object filepath = strFilepath;
            
object wordVisible = _wordVisible;
            
object oMissing = System.Reflection.Missing.Value;

        }
        
public void CreateWordFile()
        {
            _oWord 
= new Word11.Application();
            _oDoc 
= _oWord.Documents.Add(ref _missing, ref _missing, ref _missing, ref _missing);
        }
        
private void CreateWordFile(string strFullFillpath)
        {
            
object ofilename = strFullFillpath;
            _oDoc 
= _oWord.Documents.Add(ref _missing, ref _missing, ref _missing, ref _missing);

        }
        
/// <summary>
        
/// 给文档插入标题
        
/// </summary>
        
/// <param name="document"></param>
        
/// <param name="range"></param>
        
/// <param name="title"></param>
        public void InsertTitle(Word11.Document document, string title)
        {
            Word11.Paragraph oPara1;
            oPara1 
= document.Content.Paragraphs.Add(ref _missing);
            oPara1.Range.Text 
= title;
            oPara1.Range.Font.Size 
= 20;
            oPara1.Range.Font.Bold 
= 0;
            oPara1.Alignment 
= Word11.WdParagraphAlignment.wdAlignParagraphCenter;
            oPara1.Format.SpaceAfter 
= 6;
            oPara1.Range.InsertParagraphAfter();
        }
        
/// <summary>
        
/// 给表格插入表头
        
/// </summary>
        
/// <param name="document"></param>
        
/// <param name="range"></param>
        
/// <param name="title"></param>
        public void InsertTableTitle(Word11.Document document, Word11.Table table, List<int> list, Dictionary<intstring> tableTitle)
        {

            
for (int key = 0; key < tableTitle.Keys.Count; key++)
            {
                table.Cell(
1, key + 1).Range.Text = tableTitle[list[key]];
            }
            table.Rows[
1].Range.Font.Size = 15;
        }
        
/// <summary>
        
/// word文档中插入表格
        
/// </summary>
        
/// <param name="document"></param>
        
/// <param name="range"></param>
        
/// <param name="rows"></param>
        
/// <param name="cols"></param>
        public void InsertTableToWord(Word11.Document document, int rows, int cols)
        {

            Word11.Range range1 
= document.Bookmarks.get_Item(ref _oEndOfDoc).Range;
            Word11.Table table 
= document.Tables.Add(range1, rows, cols, ref _missing, ref _missing);

            table.Range.ParagraphFormat.SpaceAfter 
= 6;
            
//设置表格宽度,100%
            table.PreferredWidthType = Word11.WdPreferredWidthType.wdPreferredWidthPercent;
            table.PreferredWidth 
= 100;
            
//_oWord.Selection.ParagraphFormat.Alignment = Word11.WdParagraphAlignment.wdAlignParagraphCenter;
        }
        
private string GetFilePath(string filepath)
        {
            
string filename = filepath.Trim().Substring(filepath.LastIndexOf("/"+ 1);
            
string result = string.Empty;
            WebResponse response 
= null;
            Stream stream 
= null;
            
try
            {
                HttpWebRequest request 
= (HttpWebRequest)WebRequest.Create(Settings.ImageRemoteDirectory +
                    filepath.Substring(filepath.IndexOf(
".."+ 2));
                response 
= request.GetResponse();
                stream 
= response.GetResponseStream();
                
if (!response.ContentType.ToLower().StartsWith("text/"))
                {
                    result 
= SaveBinaryFile(response, filename);
                }
            }
            
catch { }
            
return result;
        }
        
private string SaveBinaryFile(WebResponse response, string fileName)
        {
            
string result = Settings.ImageLocalhostTempSaveDirectory + fileName;
            
byte[] buffer = new byte[1024];
            
try
            {
                
if (File.Exists(result))
                {
                    
string name = string.Format("{0}{1}{2}{3}",
                      DateTime.Now.Minute, DateTime.Now.Minute, DateTime.Now.Millisecond, fileName);
                    result 
= Settings.ImageLocalhostTempSaveDirectory + name;
                }
                Stream outStream 
= File.Create(result);
                Stream inStream 
= response.GetResponseStream();
                
int i;
                
do
                {
                    i 
= inStream.Read(buffer, 0, buffer.Length);
                    
if (i > 0) outStream.Write(buffer, 0, i);
                } 
while (i > 0);
                outStream.Close();
                inStream.Close();
            }
            
catch { }
            
return result;
        }
        
public void SetPageMargin()
        {
            
//设置页面的四个边距
            _oDoc.PageSetup.LeftMargin = 40f;
            _oDoc.PageSetup.RightMargin 
= 40f;
            _oDoc.PageSetup.TopMargin 
= 40f;
            _oDoc.PageSetup.BottomMargin 
= 40f;
            
//设置页面的高度和宽度,高度<宽度,使得页面是横板
            _oDoc.PageSetup.PageHeight = 595.2756f;
            _oDoc.PageSetup.PageWidth 
= 841.8898f;
           
        }
        
/// <summary>
        
/// 将datatable中的数据插入到word中
        
/// datatable的行列都是从0开始的
        
/// gridview的列行都是从0开始
        
/// word中表格的行列都是从1开始的
        
/// 选中gridview的列从1开始
        
/// </summary>
        
/// <param name="wordTable">word的表格</param>
        
/// <param name="dataTable">datatable数据</param>
        
/// <param name="rows">datatable数据的行数</param>
        
/// <param name="cols">gvStudent,GridView的列数,也就是页面上面的表格列数</param>
        
/// <param name="selectedColsIndex">选中gridview的列编号,从1开始</param>
        public void InsertDataToWord(Word11.Table wordTable, DataTable dataTable,
            
int rows, int cols, List<int> selectedColsIndex)
        {
            DateTime datetime;
            
bool isDateTime = false;
            
for (int i = 2; i <= rows + 1; i++)
            {
                
//wordTable.Rows.Add(ref afterRow);
                wordTable.Rows[i].Range.Font.Size = 12;
                

                
for (int j = 1; j <= cols; j++)
                {
                    
//dataTable column name
                    
//" row_number,s.zpadress,s.xmqz,s.xmqy,s.xmjz,s.xmjy,s.jx,s.zw,s.gj,s.sjyqk,s.zj,s.csrq,s.rwrq,s.xzz,s.dhd,s.dhx,s.fcjp,s.xh"
                    
//     0            1         2     3    4       5      6    7    8     9      10    11     12     13    14    15    16    17  
                    if (!selectedColsIndex.Contains(j))
                        
continue;
                    
switch (j)
                    {
                        
case 1:
                            
string file = GetFilePath(dataTable.Rows[i - 2][j].ToString());
                            
if (string.IsNullOrEmpty(file)) continue;
                            Word11.InlineShape inlineShape 
= wordTable.Cell(i, selectedColsIndex.IndexOf(j) + 1).Range.InlineShapes.AddPicture(file
                            , 
ref _missing, ref _missing,
                            
ref _missing);
                            inlineShape.Width 
= 61;
                            inlineShape.Height 
= 80;
                            
// _oWord.Selection.ParagraphFormat.Alignment = Word11.WdParagraphAlignment.wdAlignParagraphCenter;
                            break;
                        
case 2:
                            wordTable.Cell(i, selectedColsIndex.IndexOf(j) 
+ 1).Range.Text = string.Format("{0}\n{1}",
                                dataTable.Rows[i 
- 2][j].ToString().Replace("&#8226;""·"),
                                dataTable.Rows[i 
- 2][j + 1].ToString());
                            
break;
                        
case 3:
                            wordTable.Cell(i, selectedColsIndex.IndexOf(j) 
+ 1).Range.Text = string.Format("{0}\n{1}",
                                dataTable.Rows[i 
- 2][j + 1].ToString().Replace("&#8226;""·"),
                                dataTable.Rows[i 
- 2][j + 2].ToString());
                            
break;
                        
case 4:
                        
case 5:case 6:
                        
case 7:
                        
case 8:
                            isDateTime 
= DateTime.TryParse(string.Format("{0}",
                                                            dataTable.Rows[i 
- 2][j + 2].ToString()), out datetime);
                            
if (isDateTime)
                            {
                                wordTable.Cell(i, selectedColsIndex.IndexOf(j) 
+ 1).Range.Text =
                                  DateTime.Parse(
string.Format("{0}",
                                  dataTable.Rows[i 
- 2][j + 2].ToString())).ToShortDateString();
                            }
                            
else
                            {
                                wordTable.Cell(i, selectedColsIndex.IndexOf(j) 
+ 1).Range.Text = string.Format("{0}",
                                    dataTable.Rows[i 
- 2][j + 2].ToString());
                            }
                            
break;
                        
case 9:
                            wordTable.Cell(i, selectedColsIndex.IndexOf(j) 
+ 1).Range.Text = string.Format("{0}\n{1}",
                                DateTime.Parse(
string.Format("{0}",
                                 dataTable.Rows[i 
- 2][j + 2].ToString())).ToShortDateString(), DateTime.Parse(string.Format("{0}",
                                 dataTable.Rows[i 
- 2][j + 3].ToString())).ToShortDateString());
                            
break;
                        
case 10:
                            isDateTime 
= DateTime.TryParse(string.Format("{0}",
                                dataTable.Rows[i 
- 2][j + 3].ToString()), out datetime);
                            
if (isDateTime)
                            {
                                wordTable.Cell(i, selectedColsIndex.IndexOf(j) 
+ 1).Range.Text =
                                  DateTime.Parse(
string.Format("{0}",
                                  dataTable.Rows[i 
- 2][j + 3].ToString())).ToShortDateString();
                            }
                            
else
                            {
                                wordTable.Cell(i, selectedColsIndex.IndexOf(j) 
+ 1).Range.Text = string.Format("{0}",
                                    dataTable.Rows[i 
- 2][j + 3].ToString());
                            }
                            
break;
                        
case 11:
                            wordTable.Cell(i, selectedColsIndex.IndexOf(j) 
+ 1).Range.Text = string.Format("{0}\n{1}",
                               dataTable.Rows[i 
- 2][j + 3].ToString(),
                               dataTable.Rows[i 
- 2][j + 4].ToString());
                            
break;
                        
default:
                            isDateTime 
= DateTime.TryParse(string.Format("{0}",
                                dataTable.Rows[i 
- 2][j + 4].ToString()), out datetime);
                            
if (isDateTime)
                            {
                                wordTable.Cell(i, selectedColsIndex.IndexOf(j) 
+ 1).Range.Text =
                                  DateTime.Parse(
string.Format("{0}",
                                  dataTable.Rows[i 
- 2][j + 4].ToString())).ToShortDateString();
                            }
                            
else
                            {
                                wordTable.Cell(i, selectedColsIndex.IndexOf(j) 
+ 1).Range.Text = string.Format("{0}",
                                    dataTable.Rows[i 
- 2][j + 4].ToString());
                            }
                            
break;
                    }
                }
            }
            
#region
            
//for (int i = 2; i <= rows+1; i++)
            
//{
            
//    for (int j = 1; j <= cols; j++)
            
//    {
            
//        switch (j)
            
//        {
            
//            case 1:
            
//                wordTable.Cell(i, j).Range.InlineShapes.AddPicture(
            
//                GetFilePath(dataTable.Rows[i - 2][j ].ToString()),ref _missing,ref _missing,
            
//                ref _missing);
            
//                break;
            
//            case 2:
            
//                wordTable.Cell(i, j).Range.Text = string.Format("{0}\n{1}",
            
//                    dataTable.Rows[i - 2][j ].ToString(), dataTable.Rows[i - 2][j+1].ToString());
            
//                break;
            
//            case 6:
            
//                wordTable.Cell(i, j).Range.Text = string.Format("{0}\n{1}",
            
//                    dataTable.Rows[i - 2][j ].ToString(), dataTable.Rows[i - 2][j+1].ToString());

            
//                break;
            
//            default:
            
//                wordTable.Cell(i, j).Range.Text = dataTable.Rows[i - 2][j].ToString();
            
//                break;
            
//        }
            
//    }
            
//}
            #endregion
        }
        
public string Save(string filePath, string fileName)
        {
            
string tempFile;
            
if (string.IsNullOrEmpty(fileName))
                tempFile 
= Guid.NewGuid().ToString();
            
else
                tempFile 
= fileName;
            tempFile 
= string.Format("{0}{1}.doc", filePath, tempFile);
            
object oDocFileName = tempFile;
            
object fileFormat = Word11.WdSaveFormat.wdFormatDocument;
            _oDoc.SaveAs(
ref oDocFileName, ref fileFormat, ref _missing, ref _missing, ref _missing
                , 
ref _missing, ref _missing, ref _missing, ref _missing
                , 
ref _missing, ref _missing, ref _missing, ref _missing
                , 
ref _missing, ref _missing, ref _missing);
            _oDoc.Close(
ref _missing, ref _missing, ref _missing);
            _oWord.Quit(
ref _missing, ref _missing, ref _missing);
            
return tempFile;
        }
        
public void Close()
        {
            
try
            {
                _oWord.Application.Quit(
ref _missing, ref _missing, ref _missing);
                
if (_oWord != null)
                    _oWord 
= null;
            }
            
catch { }
            
finally
            {
                GC.Collect();
                GC.WaitForPendingFinalizers();
                GC.Collect();
                GC.WaitForPendingFinalizers();
            }
        }
        
#endregion
    }
}

 

ASP.NET导出word的一般处理程序,一般处理程序保证了可以多次的点击
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.Web.SessionState;
using System.Data;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Text;
using System.Data.Common;
using Microsoft.Practices.EnterpriseLibrary.Common;
using Microsoft.Practices.EnterpriseLibrary.Data;
using Kimbanx.UCS.ForeignStudentAdmin.Model;
using Kimbanx.UCS.ForeignStudentAdmin.Common;
using Word = Microsoft.Office.Interop.Word;
using System.IO;
using Microsoft.SharePoint;

namespace Kimbanx.UCS.ForeignStudentAdmin.UserControl._layouts
{
    
/// <summary>
    
/// $codebehindclassname$ 的摘要说明
    
/// </summary>
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo 
= WsiProfiles.BasicProfile1_1)]
    
public class StudentDetailsTableWordHandler_V2 : IHttpHandler, IReadOnlySessionState
    {
        
#region Fields

        
private DataTable _studentTable = null;

        
private string selected;
        
private int pageIndex;
        
private int pageSize;
        
private string queryStringWhere;
        
private string studentType;
        
private string classCode;
        
private string fileName;
        
private int gvColCount;
        
private Dictionary<intstring> fieldsSelectedDic;
        
private List<int> fieldsSelected;

        
#endregion

        
#region Methods

        
private void GetRequestQueryString()
        {
            selected 
= HttpUtility.UrlDecode ( HttpContext.Current.Request.QueryString["selected"]);
            pageIndex 
= int.Parse(HttpContext.Current.Request.QueryString["pageIndex"]);
            pageSize 
= int.Parse(HttpContext.Current.Request.QueryString["pageSize"]);
            queryStringWhere 
= HttpContext.Current.Request.QueryString["queryStringWhere"];
            studentType 
= HttpUtility.UrlDecode(HttpContext.Current.Request.QueryString["studentType"]);
            classCode 
= HttpContext.Current.Request.QueryString["classCode"];
            gvColCount 
= int.Parse(HttpContext.Current.Request.QueryString["gvColCount"]);
            fileName 
= HttpUtility.UrlDecode(HttpContext.Current.Request.QueryString["fileName"]);
            GetFieldsSelected(selected);
        }
        
private void GetFieldsSelected(string selected)
        {
            fieldsSelected 
= new List<int>();
            fieldsSelectedDic 
= new Dictionary<intstring>();

            
string[] strSplit = new string[] { "--" };
            
string[] tokenGroup = selected.Split(strSplit, StringSplitOptions.None);
            
string[] token = new string[2];
            
foreach (string group in tokenGroup)
            {
                token 
= group.Split('-');
                fieldsSelected.Add(
int.Parse(token[0]));
                fieldsSelectedDic.Add(
int.Parse(token[0]), token[1]);
            }

        }
        
/// <summary>
        
/// 获取分页之后的数据
        
/// </summary>
        private void GetStudentTable(int pageSize, int pageIndex)
        {
            _studentTable 
= null;
            
switch (queryStringWhere)
            {
                
case "jx":
                    _studentTable 
= Helper.StudentPagingResult(
                        
"zpadress,xmqz,xmqy,xmjz,xmjy,jx,zw,gj,sjyqk,zj,csrq,rwrq,xzz,dhd,dhx,fcjp,xh",
                        
"tx_xyzl",
                        
string.Format("dwbh='{0}' and jx='{1}'", classCode, studentType),
                        
"id",
                      pageSize,
                       pageIndex);
                    
//  this.gvStudent.DataBind();
                    break;
                
case "gj":
                    _studentTable 
= Helper.StudentPagingResult(
                        
"zpadress,xmqz,xmqy,xmjz,xmjy,jx,zw,gj,sjyqk,zj,csrq,rwrq,xzz,dhd,dhx,fcjp,xh",
                        
"tx_xyzl",
                        
string.Format("dwbh='{0}' and gj='{1}'", classCode, studentType),
                        
"id",
                       pageSize,
                       pageIndex);
                    
// this.gvStudent.DataBind();
                    break;
                
case "allyear":
                    _studentTable 
= Helper.StudentPagingResult(
                        
"s.zpadress,s.xmqz,s.xmqy,s.xmjz,s.xmjy,s.jx,s.zw,s.gj,s.sjyqk,s.zj,s.csrq,s.rwrq,s.xzz,s.dhd,s.dhx,s.fcjp,s.xh",
                        
"tx_xyzl as s inner join tx_dwsz as dw on s.dwbh=dw.bh",
                        
string.Format(@"s.dwbh='{0}' and (dw.kxsj>=convert(datetime,'{1}'+'-01-01',120) and
                    dw.kxsj<=convert(datetime,'{1}'+'-12-31',120) or dw.bysj>=convert(datetime,'{1}'+'-01-01',120) and
                    dw.bysj<=convert(datetime,'{1}'+'-12-31',120)) 
", classCode, studentType),
                        
"s.id",
                      pageSize,
                       pageIndex);
                    
//this.gvStudent.DataBind();
                    break;
                
case "new":
                    _studentTable 
= Helper.StudentPagingResult(
                        
"s.zpadress,s.xmqz,s.xmqy,s.xmjz,s.xmjy,s.jx,s.zw,s.gj,s.sjyqk,s.zj,s.csrq,s.rwrq,s.xzz,s.dhd,s.dhx,s.fcjp,s.xh",
                        
"tx_xyzl as s inner join tx_dwsz as dw on s.dwbh=dw.bh",
                        
string.Format(@"s.dwbh='{0}' and (dw.kxsj>=convert(datetime,'{1}'+'-01-01',120) and
                    dw.kxsj<=convert(datetime,'{1}'+'-12-31',120)) 
", classCode, studentType),
                        
"s.id",
                       pageSize,
                       pageIndex);
                    
//this.gvStudent.DataBind();
                    break;
                
default:
                    _studentTable 
= Helper.StudentPagingResult(
                        
"zpadress,xmqz,xmqy,xmjz,xmjy,jx,zw,gj,sjyqk,zj,csrq,rwrq,xzz,dhd,dhx,fcjp,xh",
                        
"tx_xyzl",
                        
string.Format("dwbh='{0}'", classCode),
                        
"id",
                      pageSize,
                       pageIndex);
                    
//this.gvStudent.DataBind();
                    break;
            }

        }

        
#endregion
        
public void ProcessRequest(HttpContext context)
        {
            SPSecurity.RunWithElevatedPrivileges(
delegate()
            {
                GetRequestQueryString();
                GetStudentTable(
this.pageSize, this.pageIndex);

                StudentDetailsTable_Word_V2 customWord 
= new StudentDetailsTable_Word_V2();
                customWord.CreateWordFile();
                customWord.SetPageMargin();
                customWord.InsertTitle(customWord.ODoc, fileName);
                
int tableTitleRows = 1;
                
int tableRows = _studentTable.Rows.Count + tableTitleRows;
                
int tableCols = gvColCount;

                customWord.InsertTableToWord(customWord.ODoc, tableRows, fieldsSelected.Count);

                Word.Table table 
= customWord.ODoc.Tables[1];
                customWord.InsertTableTitle(customWord.ODoc, table, fieldsSelected, fieldsSelectedDic);
                table.Borders.InsideLineStyle 
= Word.WdLineStyle.wdLineStyleSingle;
                table.Borders.OutsideLineStyle 
= Word.WdLineStyle.wdLineStyleSingle;

                
object row = table.Rows[1];
                customWord.InsertDataToWord(table, _studentTable, tableRows 
- tableTitleRows, tableCols, fieldsSelected);

                
#region

                
string tempFileFullName = customWord.Save(Settings.ImageLocalhostTempSaveDirectory, fileName);
                
string tempFileName = tempFileFullName.Substring(tempFileFullName.LastIndexOf("\\"+ 1);

                
using (FileStream stream = new FileStream(tempFileFullName, FileMode.Open))
                {
                    
byte[] fileBytes = new byte[stream.Length];
                    stream.Read(fileBytes, 
0, (int)stream.Length);

                    HttpContext.Current.Response.ContentType 
= "application/msword";
                    HttpContext.Current.Response.AddHeader(
"content-disposition""attachment; filename=" + HttpUtility.UrlEncode(tempFileFullName));
                    HttpContext.Current.Response.OutputStream.Write(fileBytes, 
0, (int)stream.Length);
                } File.Delete(tempFileFullName);
                
#endregion
            });
        }

        
public bool IsReusable
        {
            
get
            {
                
return false;
            }
        }
    }
}