• 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

     

  • 相关阅读:
    确认端口占用
    [转]自建Syncthing中继服务器(私密传输或造福大众)
    【转】Syncthing – 数据同步利器---自己的网盘,详细安装配置指南,内网使用,发现服务器配置
    【转】搭建和配置Syncthing发现和中继服务器
    【转】Syncthing的安装与使用
    pycrypto安装出错的问题 intmax_t C:Program Files (x86)Windows Kits10include10.0.10240.0ucrtinttypes.
    Git从库中移除已删除大文件
    词云图
    [转].NET 性能测试工具 -- 事件跟踪器(ETW)
    [转]ANTS Performance Profiler和ANTS Memory Profiler 使用
  • 原文地址:https://www.cnblogs.com/lyrix/p/976009.html
Copyright © 2020-2023  润新知