例-通用Word导出

概述

介绍Word导出的配置及调用说明

参数

var opts={ ​ otherName:"配置名称", ​ fileTitle:"最后生成文件名", modelFileName:"模板文件", ​ showPurview:true //是否显示预览 } wm.c.exportWord(opts);

示例

导出原理:取Word数据源配置文件,获取相应的数据源,然后打开Word导出模版,替换里面定义的一些标识或书签,最终生成Word。

1.定义Word模板文件

此文件需放在项目根目录下的“Business/Template/Word”文件夹下,如 公告表Word.doc,

主要格式说明:

uniqueNo:对应当前实体网格uniqueNo,导出时就根据这个uniqueNo来查找数据源配置文件里的对应节点

modelFileName:对应Word模版文件名,以这个来查找是对应哪个Word模版

fileTitle:对应Word模版文件名,导出后另存为的默认文件史

CellList:具体项,里面的单个Cell可以独立设置数据源,也可在CellList里统一用 DataSource节点设置统一的数据源

​ Cell的Filed是用来和Word模版里定义的标识或书签名对应的

TableList:表格内容,如Word里面需插入表格,则要在此节点下配置,Name节点就是对应Word模版里的书签名(表格在模版

​ 里一般是定义成书签)。如果表格数据比较大,可能导出时会很慢,这时需要增加一个属性IsLargeData="true"

​ (见下面例子),系统导出时就会用另外一种快速处理方式导出。导出表格的样式,可以Style属性上设置,见

​ 下面例子。

HeaderAndFooter:里面定义页眉页脚的数据源,和CellList类似

DynaTableList节点:主要用于动态网格,及几个网格要合在一起显示(中间没有空行),网格边框有加粗等

​ Style:网格的总体样式,一般和下面XML里例子设置的一样

​ MergerRowsCount:从第一行开始要合并的行的总数

​ TdStyle:网格行的样式,如设置高度,垂直居中等

​ ColumnsWidth:设置网格行的宽度,格式为 列名:宽度值 ,多个以分号隔开

​ TopBorderWidth,BottomBorderWidth,LeftBorderWidth,RightBorderWidth:各边框 Border宽度

例如:

<?xml version="1.0" encoding="utf-8" ?>

<Entity>

  <Other>

    <WordList>

      <Word Name="wordNamw1" ViewType="printpreview">

    <!--基础项标识-->

    <CellList>

        <CellItem>

            <Cell Field="sp_projectno" ReplaceType="Text"></Cell>

            <Cell Field="cooperationDe" ReplaceType="BookMark" >

                <Sql Type="Oracle">

                    <![CDATA[

                select GetCoorperDept('{@Request['id']}',2) from dual

                 ]]>

                </Sql>

            </Cell>

            <Cell Field="cooperationOr" ReplaceType="BookMark" >

                <Sql Type="Oracle">

                    <![CDATA[

                    select GetCoorperDept('{@Request['id']}',3) from dual

                 ]]>

                </Sql>

            </Cell>

            <Cell Field="SP_ApplyDate" ReplaceType="Text"></Cell>

            <Cell Field="SP_StartTime" ReplaceType=""></Cell>

            <Cell Field="sp_productionform" ReplaceType=""></Cell>

            <DataSource Type="Oracle">

                <![CDATA[

                SELECT All a.SP_Name,a.SP_Name as SP_Name1,a.SP_ProjectNO,to_char(a.SP_ApplyDate,'yyyy')||'年'||to_char(a.SP_ApplyDate,'mm')||'月'||to_char(a.SP_ApplyDate,'dd')||'日' SP_ApplyDate,

                a.SP_ProjectNO,to_char(a.SP_EndTime,'yyyy')||'年'||to_char(a.SP_EndTime,'mm')||'月' SP_EndTime,

                to_char(a.SP_StartTime,'yyyy')||'年'||to_char(a.SP_StartTime,'mm')||'月' SP_StartTime,a.sp_productionform,sb.caption TakeOnDeptID

                    FROM PDM_KJXM_SPBaseInfo a left join sysbusinessUnit sb on sb.sysbusinessunitid=a.SP_ApplyDept

                        WHERE a.PDM_KJXM_SPBaseInfoId='{@Request['Id']}' AND a.SP_ProjectType1='2'  

                ]]>

            </DataSource>

            <DataSource Type="Sql">

                <![CDATA[

                select '123456' 

                ]]>

            </DataSource>

        </CellItem>

    </CellList>

    

  <DynaTableList>

    <DynaTable Name="zhibiao" Style="width:600px">

      <Table TopBorderWidth="2" BottomBorderWidth="2" LeftBorderWidth="2" RightBorderWidth="2" 

         Style="text-align:center;width:100%;font-size:11pt;border-collapse:collapse;border:none;">

        <DataSource Type="Oracle">

          <![CDATA[

                select '阶段名称','开始日期','结束日期','考核指标','研究内容' from dual

                union all

                select SchemeItemName,to_char(PlanStartDate,'yyyy-mm-dd'),to_char(PLanFinishDate,'yyyy-mm-dd'),AssessTarget,ResourceScheme from PDM_JKRW_ProjectTaskScheme where (IsDeleted='0' or IsDeleted is null) 

                and TaskBookId= '{@Request['id']}'

         ]]>

        </DataSource>

      </Table>

    </DynaTable>

      

    <DynaTable Name="fenpeibiao" Style="wdith:650px">

        <Table MergerRowsCount="2" TdStyle="height:40px;valign:middle;" ColumnsWidth="A1:120;A2:90" TopBorderWidth="2" BottomBorderWidth="1" LeftBorderWidth="2" RightBorderWidth="2" 

Style="text-align:center;width:100%;font-size:11pt;border-collapse:collapse;border:none;">

        <DataSource Type="Oracle" IsStore="true">

          <![CDATA[

              P_ExportWord '{@Request['id']}'

          ]]>

        </DataSource>

      </Table>

      <Table TopBorderWidth="0" BottomBorderWidth="2" LeftBorderWidth="2" RightBorderWidth="2" 

Style="width:100%;font-size:11pt;border-collapse:collapse;border:none;">

        <DataSource Type="Oracle">

          <![CDATA[

                        select '<font size=4><strong>备注:</strong></font>'||'[@br]'||'①  项目研发的最后一年为结项年度,分配的年度阶段积分不得低于项目绩效积分的50%;'||'[@br]'

              ||'② 项目组计划分配的年度阶段积分是项目技术主管填写的初步计划,项目管理委员会应审核是否符'

              ||'[@br]'||'合各年度预期的研发工作量,并可进行适当调整;'

              ||'[@br]'||'执行过程中调整的年度阶段积分是在项目遇到不可抗力或中心对研发项目进行重大变动时对年度'

              ||'[@br]'||'阶段积分进行的调整,调整必须经过项目管理委员会审核批准。'

              from dual

                    ]]>

        </DataSource>

      </Table>

    </DynaTable>

  

  </DynaTableList>

 

    <!--书签 表格-->

    <TableList>

        <Table Name="CJList" IsLargeData="true" Style="border-collapse:collapse;border:none;font-size:8pt;width=100%">

            <Row>

                <Column Name="姓 名" ColSpan="" RowSpan="1"></Column>

                <Column Name="性别" ColSpan="" RowSpan=""></Column>

                <Column Name="年龄" ColSpan="" RowSpan=""></Column>

                <Column Name="学历" ColSpan="" RowSpan=""></Column>

                <Column Name="职称" ColSpan="" RowSpan=""></Column>

                <Column Name="专业" ColSpan="" RowSpan=""></Column>

                <Column Name="工作单位" ColSpan="" RowSpan=""></Column>

                <Column Name="任务分工" ColSpan="1" RowSpan=""></Column>

            </Row>

            <DataSource Type="Oracle">

                <![CDATA[

                        select

                decode(Ownershipunits,1,s.FullName,w.Fullname) fullname, 

                sm.displaytext sex,

                pl.Age,

                decode(sm1.displaytext,null,pl.Education,sm1.displaytext) degree, 

                pl.Title,

                pl.Professional,

                pl.Affiliations,

                pl.ProjectTask

            from PDM_KJXM_PMList pl

                left join Sysuser s on pl.PersonnelNativeID=s.SysuserId 

                left join PDM_KJXM_ForeignCoWorkers w on pl.PersonnelNativeID=w.PDM_KJXM_ForeignCoWorkersId 

                left join stringmap sm on sm.attributevalue=to_char(pl.Gender) and sm.attributename='Sex'

                left join stringmap sm1 on sm1.attributevalue=to_char(pl.Education) and sm1.attributename='Degree'

                where(Lower(pl.IsDeleted)='false' or pl.IsDeleted='0' or pl.IsDeleted is null) and SP_SPBaseInfo='{@Request['Id']}'

                order by pl.Orders,pl.ProjectPersonRole

            ]]>

            </DataSource>

        </Table>

    </TableList>

    

    <!--页眉页脚-->

    <HeaderAndFooter>

        <Item Field="SPName1">

            <Sql Type="Oracle">

                <![CDATA[

                         select 'aa' from dual

                    ]]>

            </Sql>

        </Item>

        <Item Field="SPName2">

        </Item>

        <DataSource Type="Oracle">

            <![CDATA[

                  select 'bbb' SPName1,'ccc' SPName2 from dual

               ]]>

        </DataSource>

    </HeaderAndFooter>

</Word>      

</WordList>

</Other>

</Entity>


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283

2.定义Word模版

画Word模版文件,模版文件是放在项目下的“Business/Template/Word”文件夹下,文件名和配置里的Title对应,

如:国家局项目申报书1.doc

模版里定义类似 {@Field}或书签,来和数据源的配置文件里的Cell的Field或Table的Name对应,如下图:

基础项标识:

img

书签:

img

3.页面调用:

主要是调用:调用wm.c.exportWord({id:id,modelFileName:"申报书",otherName:"exportWordOtherName"});

如:

<Button Name="cmd申报书预览及导出" Text="申报书预览及导出"  ToolTip="申报书预览及导出" Type="Normal" Image="WebToolBar/16_down.gif" DisplayMode="TextAndImage" Script="downBook()" Target="Grid"></Button>
1

function downBook()

{

​ var thisGrid=wm.c.getGrid();

​ var rows = thisGrid.getDoRows(true);

​ if(rows.length<1) return;

​ var id=rows[0].idd;

​ wm.c.exportWord({id:id,modelFileName:"申报书",otherName:"exportWordOtherName"});

}