Excel Programming (C# + VBA) Part II

 

2.     Step 2 Generate an Excel template to fill with source data in C#

a.       Create excel application object

            Microsoft.Office.Interop.Excel.Application xlsApp  =   null ;

            Workbook wb
= null ;
           


b.      Open the template and SaveCopyAs a new temporary template file name

                 fileName =  templatePath  +   @" \template.xls " ;
                 excelFileName 
=  tempFileName  +   " _template.xls " ;
                 tempFileName
=  tempFileName  +   " _template_Temp.xls " ;
                
                xlsApp 
=   new  ApplicationClass();
                wb 
=  xlsApp.Workbooks.Open(fileName, Type.Missing, Type.Missing, 
                    Type.Missing, Type.Missing, Type.Missing, Type.Missing, 
                    Type.Missing, Type.Missing, Type.Missing, Type.Missing, 
                    Type.Missing, Type.Missing, Type.Missing, Type.Missing);
                wb.Unprotect(TemplatePassword);

                wb.SaveCopyAs(tempFileName);


c.       Close the template and open the new temporary file

                wb.Close( false , Type.Missing, Type.Missing);
                xlsApp.Quit();
                 wb 
=  xlsApp.Workbooks.Open(tempFileName, Type.Missing, Type.Missing, 
                    Type.Missing, Type.Missing, Type.Missing, Type.Missing, 
                    Type.Missing, Type.Missing, Type.Missing, Type.Missing, 
                    Type.Missing, Type.Missing, Type.Missing, Type.Missing);


d.      Get master data from database and fill in each cell and set, validation lock property properly based on requirement.

ws  =  (Worksheet)wb.Worksheets[DataSourceSheet];
                LoadDataSource(ws, wb, beginDate, endDate);
.


private   void  LoadDataSource(Worksheet ws, Workbook wb, DateTime beginDate, DateTime endDate)
        
{
            DataSet ds 
= SqlHelper.ExecuteDataset(connnectionString, CommandType.Text, "");
            
            
//Generate the Base Info
            ws.get_Range("A1",System.Type.Missing).Value2 = 0//Check flag
            ws.get_Range("A4",System.Type.Missing).Value2 = beginDate.ToString("yyyy-MM-dd");
            ws.get_Range(
"A5",System.Type.Missing).Value2 = endDate.ToString("yyyy-MM-dd");
            ws.get_Range(
"A6",System.Type.Missing).Value2 = beginDate.ToString(PlanDateFormat);
            ws.get_Range(
"A7",System.Type.Missing).Value2 = _templatetype;

            LoadActionStatus(wb, ws,  ds.Tables[
0]);
            LoadPromotionType(wb, ws,  ds.Tables[
0]);

            LoadUserDataSource(wb, ws, beginDate.ToString(PlanDateFormat));

            LoadCategoryDataSource(ws);

            
//ws.Visible = XlSheetVisibility.xlSheetVisible;
        }



        
private   void  LoadMaterialDataSource(Worksheet ws)
        
{
            
string sql = "select MaterialCode, EnglighShortName as MaterialName from Material";
            
string conn = ConfigurationSettings.AppSettings["ConnString"];
            Range rng 
= ws.get_Range("Q1",System.Type.Missing);
            QueryTable qt 
= ws.QueryTables.Add("OLEDB;Provider=SQLOLEDB.1;" + conn, rng, sql);
            qt.Refresh(System.Type.Missing);
            qt.Name 
= "Material";
        }


        
private   void  LoadCategoryDataSource(Worksheet ws)
        
{
            
string sql = "SELECT CategoryID, CategoryNameEn FROM Category WHERE Status = 3";
            
string conn = ConfigurationSettings.AppSettings["ConnString"];
            Range rng 
= ws.get_Range("W1",System.Type.Missing);
            QueryTable qt 
= ws.QueryTables.Add("OLEDB;Provider=SQLOLEDB.1;" + conn, rng, sql);
            qt.Refresh(System.Type.Missing);
            qt.Name 
= "Category";
        }


e.       Protected worksheets and workbook based on requirement

           ws  =  (Worksheet) wb.Worksheets[SummarySheet];

            ws.Protect(TemplatePassword,System.Type.Missing,System.Type.Missing,System.Type.Missing,System.Type.Missing,System.Type.Missing,System.Type.Missing,System.Type.Missing,System.Type.Missing,System.Type.Missing,System.Type.Missing,System.Type.Missing,System.Type.Missing,System.Type.Missing,System.Type.Missing, System.Type.Missing);

           wb.Protect(TemplatePassword,System.Type.Missing, System.Type.Missing);

 

f.      Save the temporary file as the final template name

            wb.SaveCopyAs(excelFileName);                  

g.       Close the template and release the excel resource

             if  (wb != null )

            
{

                  wb.Close(
false, Type.Missing, Type.Missing);

            }


            
if (xlsApp  !=   null

            
{

                  xlsApp.Quit();

            }


            
// Remove the temporary file

            System.IO.File.Delete(tempFileName);   

.          Step 3 Download the template from web site

4.       Step 4 Fill in the template and verify the data

a.       User fills in the data according to the description: list validation, free typing in, popup form etc.

b.      Click the validation button in the sheet and validate the dat

5.       Step 5 Upload the template to the web site

 

转载于:https://www.cnblogs.com/lyrix/archive/2007/12/04/976009.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值