ASP导出Word带页眉页脚,中文不乱码
关键代码:
<% Response.Clear() Response.CodePage=65001 Response.Charset="UTF-8" Response.ContentType ="application/vnd.ms-word" Response.AddHeader "Content-Disposition", "attachment; filename=WhitePaper"&formatDate(Now(),1)&".doc"%><?xml version="1.0" encoding="UTF-8" standalone="yes"?> <?mso-application progid="Word.Document"?>
具体<w:wordDocument>的内容没写出来。可以通过将word另存为xml得到。
xml中动态数据部分通过数据查询,然后绑定字段求值即可。
默认生成的xml是三行代码,XML主体部分是第三行,千万不要去调整这一行的格式(换行、缩进)会导致生成的xml 使用Word打开报错。
另外,asp文件必须保存为(UTF-8 带签名)的。
在导出过程中用到的几个ASP自定义函数:
计算字符串中文字数:
function LenChStr(str) dim i c=0 for i=1 to Len(str) 'if Asc(Mid(str,i,1)) < 0 then 'if CheckExp("^[^\u4E00-\u9FA5]+$", Mid(str,i,1))=True then 'If not (Asc(Mid(str, i, 1)) < 10000 And Asc(Mid(str, i, 1)) > -10000) Then valAsc = Asc(Mid(str, i, 1)) valAscW = AscW(Mid(str, i, 1)) If valAsc <> valAscW Then c=c+1 end if next LenChStr=c end function
输出指定长度的字符串,不足则补位(中文算两个长度):
Function PadRight(Value,Length,sChar) Dim strText,I strText = String(Length,sChar) strText = Value & strText if (len(Value)+lenChStr(Value))<Length then PadRight = Left(strText,Length-LenChStr(Value)) else PadRight=Value end if End Function
转换时间,时间格式化:
Function formatDate(t,ftype) dim y, m, d, h, mi, s formatDate="" If IsDate(t)=False Then Exit Function y=cstr(year(t)) m=cstr(month(t)) If len(m)=1 Then m="0" & m d=cstr(day(t)) If len(d)=1 Then d="0" & d h = cstr(hour(t)) If len(h)=1 Then h="0" & h mi = cstr(minute(t)) If len(mi)=1 Then mi="0" & mi s = cstr(second(t)) If len(s)=1 Then s="0" & s select case cint(ftype) case 1 ' yyyy-mm-dd formatDate=y & "-" & m & "-" & d case 2 ' yy-mm-dd formatDate=right(y,2) & "-" & m & "-" & d case 3 ' mm-dd formatDate=m & "-" & d case 4 ' yyyy-mm-dd hh:mm:ss formatDate=y & "-" & m & "-" & d & " " & h & ":" & mi & ":" & s case 5 ' hh:mm:ss formatDate=h & ":" & mi & ":" & s case 6 ' yyyy年mm月dd日 formatDate=y & "年" & m & "月" & d & "日" case 7 ' yyyymmdd formatDate=y & m & d case 8 'yyyymmddhhmmss formatDate=y & m & d & h & mi & s end select End Function