Asp classic 创建excel电子表格

Asp classic 创建excel电子表格,asp-classic,vbscript,Asp Classic,Vbscript,有没有办法使用VBScript创建excel电子表格?我可以使用FileSystemObject创建文本文件,并使用我想要的任何扩展名,但当我尝试下载此文件时,它会给我“在excel中打开”选项,然后会出现一条消息,说明该文件的格式不同,这正是我要避免的: set fs=Server.CreateObject("Scripting.FileSystemObject") set tfile=fs.CreateTextFile(Server.MapPath("xls/streamtest.xls")

有没有办法使用VBScript创建excel电子表格?我可以使用FileSystemObject创建文本文件,并使用我想要的任何扩展名,但当我尝试下载此文件时,它会给我“在excel中打开”选项,然后会出现一条消息,说明该文件的格式不同,这正是我要避免的:

set fs=Server.CreateObject("Scripting.FileSystemObject")
set tfile=fs.CreateTextFile(Server.MapPath("xls/streamtest.xls"),true,false)
我知道这是将文本以ASCII格式推入文件

是否有一些字符序列,特定的格式,我可以用来解决所有这些问题


谢谢

如果在服务器上安装并可访问Excel,并且sFSpec是要创建的(空).xls的完整(服务器映射,可访问)文件规范,则

 Dim oExcel : Set oExcel = [Server.]CreateObject( "Excel.Application" )
 oExcel.Workbooks.Add.SaveAs sFSpec
 oExcel.Quit
应该有用。如果不能使用“Excel.Application”,可以通过打开Excel连接使用ADO并执行适当的CREATETABLE语句

已添加

低技术的方法是使用从某个工作站偷来的空.xls作为模板;但您可以动态创建.xls:

  Dim sFSpec : sFSpec = resolvePath("..\data\byado.xls")
  If goFS.FileExists(sFSpec) Then goFS.DeleteFile sFSpec
  Dim oXDb : Set oXDb = CreateObject("ADODB.Connection")
  Dim sCS  : sCS      = Join(Array(_
        "Provider=Microsoft.Jet.OLEDB.4.0" _
      , "Data Source=" & sFSpec            _
      , "Extended Properties="""           _
          & Join(Array(     _
                "Excel 8.0" _
              , "HDR=Yes"   _
              , "IMEX=0"    _
            ), ";" )        _
          & """"            _
  ), ";")
  oXDb.Open sCS
  oXDb.Execute "CREATE TABLE [WhatEver] (DontCare INTEGER)"
  oXDb.Close
  If goFS.FileExists(sFSpec) Then WScript.Echo "qed"

(您可能需要修改“Excel!版本!”;“IMEX=0”很重要)

我同意上面的评论。我总是使用Response.ContentType和Response.AppendHeader来完成这项工作

Response.ContentType = "application/vnd.ms-excel"
Response.AppendHeader "content-disposition", "filename=MySpreadsheet.xls"

我回答了另一个问题。 如果安装了office(至少是Excel),您应该能够在服务器上使用CreateObject(“Excel.Application”)

Xls(以及其他类型的Excel2007/2010)是二进制文件,您无法像那样轻松创建,您需要使用Com对象来创建和操作它们


有关可以使用的vba函数的列表,请参见。在服务器上不使用Excel.application的情况下,最好、最快的方法是生成Excel Xml文件。您唯一无法执行的功能是插入图片

与使用html表格不同,您将能够在excel中支持本机数据(如日期),并且能够格式化、插入公式


将excel另存为excel XML并查看生成XML文件。这有点棘手,但效果很好。

Microsoft.xlsx文件只是一个示例

这意味着我们可以将xml文件和文件夹结构写成文本文件,压缩文件夹并将该压缩文件重命名为.xlsx。现在我们有了一个新的空excel文件。下面是我的代码,无需安装MS excel即可完成此操作

ZipAFolder函数已从中修改

'
'依赖项:ZipAFolder、moveFile、WriteFile、Environ、OpenWithExplorer、FileExists、FolderExists、ScriptEngine、MkDir
'版本:1.0.0
“杰里米。gerdes@navy.mil 
'CC0 1.0通用(CC0 1.0)公共领域奉献
“[TODO]将创建、修改和访问日期的文件属性重置为1979年12月31日晚上11:00(对于东部时区)的所有文件
'用法示例
'BuildEmptyExcelFile GetCurrentFileFolder()&“\”和“anEmptyExcelFile.xlsx”
公共子构建EmptyExcelFile(strNewExcelFile)
Dim strLocalAppTmp
strLocalAppTmp=Environ(“LocalAppData”)&“\”和“tmp”
MkDir strLocalAppTmp
Dim strTmpZipPath
strTmpZipPath=strLocalAppTmp&“\”和“buildEmptyExcelFile”
MkDir strTmpZipPath
WriteToFile strTmpZipPath&“\”和“[Content\u Types].xml”_
"" & _
"", _
假,真
MkDir strTmpZipPath&“\”和“\u rels”
写文件_
strTmpZipPath&“\”和“\”和“.rels”&“\”和“.rels”_
"", _
假,真
MkDir strTmpZipPath&“\”和“docProps”
写文件_
strTmpZipPath&“\”和“docProps”&“\”和“app.xml”_
“Microsoft Excel0falseWorksheets1Sheet1HPES NMCI NGENfalsefalsefalse16.0300”_
假,真
写文件_
strTmpZipPath&“\”和“docProps”&“\”和“core.xml”_
“jeremy.gerdesjeremy.gerdes2021-04-09T02:10:55Z2021-04-09T02:11:30Z”_
假,真
MkDir strTmpZipPath&“\”和“xl”
MkDir strTmpZipPath&“\”和“xl”&“\”和“主题”
写文件_
strTmpZipPath&“\”&“xl”&“\”&“styles.xml”_
"" & _
"" & _
"", _
假,真
写文件_
strTmpZipPath&“\”&“xl”&“\”&“workbook.xml”_
"" & _ 
"" & _ 
"", _
假,真
MkDir strTmpZipPath&“\”和“xl”&“\”和“\u rels”
写文件_
strTmpZipPath&“\”&“xl”&“\”&“\u rels”&“\”&“workbook.xml.rels”_
"", _
假,真
MkDir strTmpZipPath&“\”和“xl”&“\”和“主题”
写文件_
strTmpZipPath&“\”&“xl”&“\”&“主题”&“\”&“theme1.xml”_
"" & _
"" & _
"" & _
"" & _
"" & _
"" & _
"" & _
"" & _
"", _
假,真
MkDir strTmpZipPath&“\”和“xl”&“\”和“工作表”
写文件_
strTmpZipPath&“\”&“xl”&“\”&“工作表”&“\”&“sheet1.xml”_
"" & _
"", _
假,真
ZipAFolder strTmpZipPath_
strLocalAptMP&“\”和“EmptyExcelFile.zip”
移动文件strLocalAppTmp&“\”和“EmptyExcelFile.zip”,strNewExcelFile
端接头
“无依赖性
'版本1.0.0
“杰里米。gerdes@navy.mil
公共子移动文件(strSourcePath、strDestinationPath)
模糊fso
设置fso=CreateObject(“Scripting.FileSystemObject”)
'源文件是否存在?
如果文件存在(strSourcePath),则
'如果目标是文件夹,则将文件移动到保留源名称的文件夹中
如果FolderExists(strDestinationPath),则
strDestinationPath=strDestinationPath&“\”&fso.GetFileName(strSourcePath)
如果结束
'如果目标allready存在,请尝试将其删除…此移动方法始终覆盖写入
如果文件存在(strDestinationPath),则
fso.DeleteFile strDestinationPath,True
如果结束
'如果目标路径不存在,请尝试创建它
如果不存在FolderExists(fso.GetParentFolderName(strDestinationPath)),则
MkDir(fso.GetParentFolderName(strDestinationPath))
如果结束
'移动文件
fso.moveFile strSourcePath,strDe
Set objExcel = CreateObject("Excel.Application") 
objExcel.Visible = True 
objExcel.DisplayAlerts = FALSE 

Set objWorkbook = objExcel.Workbooks.Add 
Set objWorksheet = objWorkbook.Worksheets(1) 

objWorksheet.Cells(1, 1).Value = Now 
objWorkbook.SaveAs("C:\Scripts\Test.xls") 
objExcel.Quit 
'
' Dependencies: ZipAFolder, moveFile, writeToFile, Environ, OpenWithExplorer, FileExists, FolderExists, ScriptEngine, MkDir
' Version: 1.0.0
' by jeremy.gerdes@navy.mil 
' CC0 1.0 Universal (CC0 1.0) Public Domain Dedication
' [TODO] reset the file attributes of date - Created, Modified, and Accessed to 12/31/1979 11:00 PM (for eastern time zone) to all files
' Usage example
' BuildEmptyExcelFile GetCurrentFileFolder() & "\" & "anEmptyExcelFile.xlsx"
Public Sub BuildEmptyExcelFile(strNewExcelFile)
    Dim strLocalAppTmp
    strLocalAppTmp = Environ("LocalAppData") & "\" & "tmp"
    MkDir strLocalAppTmp
    Dim strTmpZipPath
    strTmpZipPath = strLocalAppTmp & "\" & "buildEmptyExcelFile"
    MkDir strTmpZipPath
    WriteToFile strTmpZipPath & "\" & "[Content_Types].xml" ,  _
        "<?xml version=""1.0"" encoding=""UTF-8"" standalone=""yes""?>" & _
        "<Types xmlns=""http://schemas.openxmlformats.org/package/2006/content-types""><Default Extension=""rels"" ContentType=""application/vnd.openxmlformats-package.relationships+xml""/><Default Extension=""xml"" ContentType=""application/xml""/><Override PartName=""/xl/workbook.xml"" ContentType=""application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml""/><Override PartName=""/xl/worksheets/sheet1.xml"" ContentType=""application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml""/><Override PartName=""/xl/theme/theme1.xml"" ContentType=""application/vnd.openxmlformats-officedocument.theme+xml""/><Override PartName=""/xl/styles.xml"" ContentType=""application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml""/><Override PartName=""/docProps/core.xml"" ContentType=""application/vnd.openxmlformats-package.core-properties+xml""/><Override PartName=""/docProps/app.xml"" ContentType=""application/vnd.openxmlformats-officedocument.extended-properties+xml""/></Types>", _
        False, True
    MkDir strTmpZipPath & "\" & "_rels"
    WriteToFile _
        strTmpZipPath & "\" & "_rels" & "\" & ".rels" , _
        "<?xml version=""1.0"" encoding=""UTF-8"" standalone=""yes""?><Relationships xmlns=""http://schemas.openxmlformats.org/package/2006/relationships""><Relationship Id=""rId3"" Type=""http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties"" Target=""docProps/app.xml""/><Relationship Id=""rId2"" Type=""http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties"" Target=""docProps/core.xml""/><Relationship Id=""rId1"" Type=""http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument"" Target=""xl/workbook.xml""/></Relationships>", _
        False, True
    MkDir strTmpZipPath & "\" & "docProps"
    WriteToFile _
        strTmpZipPath & "\" & "docProps" & "\" & "app.xml" , _
        "<?xml version=""1.0"" encoding=""UTF-8"" standalone=""yes""?><Properties xmlns=""http://schemas.openxmlformats.org/officeDocument/2006/extended-properties"" xmlns:vt=""http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes""><Application>Microsoft Excel</Application><DocSecurity>0</DocSecurity><ScaleCrop>false</ScaleCrop><HeadingPairs><vt:vector size=""2"" baseType=""variant""><vt:variant><vt:lpstr>Worksheets</vt:lpstr></vt:variant><vt:variant><vt:i4>1</vt:i4></vt:variant></vt:vector></HeadingPairs><TitlesOfParts><vt:vector size=""1"" baseType=""lpstr""><vt:lpstr>Sheet1</vt:lpstr></vt:vector></TitlesOfParts><Company>HPES NMCI NGEN</Company><LinksUpToDate>false</LinksUpToDate><SharedDoc>false</SharedDoc><HyperlinksChanged>false</HyperlinksChanged><AppVersion>16.0300</AppVersion></Properties>", _
        False, True
    WriteToFile _
        strTmpZipPath & "\" & "docProps" & "\" & "core.xml" , _
        "<?xml version=""1.0"" encoding=""UTF-8"" standalone=""yes""?><cp:coreProperties xmlns:cp=""http://schemas.openxmlformats.org/package/2006/metadata/core-properties"" xmlns:dc=""http://purl.org/dc/elements/1.1/"" xmlns:dcterms=""http://purl.org/dc/terms/"" xmlns:dcmitype=""http://purl.org/dc/dcmitype/"" xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance""><dc:creator>jeremy.gerdes</dc:creator><cp:lastModifiedBy>jeremy.gerdes</cp:lastModifiedBy><dcterms:created xsi:type=""dcterms:W3CDTF"">2021-04-09T02:10:55Z</dcterms:created><dcterms:modified xsi:type=""dcterms:W3CDTF"">2021-04-09T02:11:30Z</dcterms:modified></cp:coreProperties>", _
        False, True
    MkDir strTmpZipPath & "\" & "xl"
    MkDir strTmpZipPath & "\" & "xl" & "\" & "theme"
    WriteToFile _
        strTmpZipPath & "\" & "xl" & "\" & "styles.xml", _
"<?xml version=""1.0"" encoding=""UTF-8"" standalone=""yes""?>" & _
"<styleSheet xmlns=""http://schemas.openxmlformats.org/spreadsheetml/2006/main"" xmlns:mc=""http://schemas.openxmlformats.org/markup-compatibility/2006"" mc:Ignorable=""x14ac x16r2"" xmlns:x14ac=""http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac"" xmlns:x16r2=""http://schemas.microsoft.com/office/spreadsheetml/2015/02/main""><fonts count=""1"" x14ac:knownFonts=""1""><font><sz val=""11""/><color theme=""1""/><name val=""Calibri""/><family val=""2""/><scheme val=""minor""/></font></fonts><fills count=""2""><fill><patternFill patternType=""none""/></fill><fill><patternFill patternType=""gray125""/></fill></fills><borders count=""1""><border><left/><right/><top/><bottom/><diagonal/></border></borders><cellStyleXfs count=""1""><xf numFmtId=""0"" fontId=""0"" fillId=""0"" borderId=""0""/></cellStyleXfs><cellXfs count=""1""><xf numFmtId=""0"" fontId=""0"" fillId=""0"" borderId=""0"" xfId=""0""/></cellXfs><cellStyles count=""1""><cellStyle name=""Normal"" xfId=""0"" builtinId=""0""/></cellStyles>" & _
"<dxfs count=""0""/><tableStyles count=""0"" defaultTableStyle=""TableStyleMedium2"" defaultPivotStyle=""PivotStyleLight16""/><extLst><ext uri=""{EB79DEF2-80B8-43e5-95BD-54CBDDF9020C}"" xmlns:x14=""http://schemas.microsoft.com/office/spreadsheetml/2009/9/main""><x14:slicerStyles defaultSlicerStyle=""SlicerStyleLight1""/></ext><ext uri=""{9260A510-F301-46a8-8635-F512D64BE5F5}"" xmlns:x15=""http://schemas.microsoft.com/office/spreadsheetml/2010/11/main""><x15:timelineStyles defaultTimelineStyle=""TimeSlicerStyleLight1""/></ext></extLst></styleSheet>", _
        False, True
    WriteToFile _
        strTmpZipPath & "\" & "xl" & "\" & "workbook.xml", _
"<?xml version=""1.0"" encoding=""UTF-8"" standalone=""yes""?>" & _ 
"<workbook xmlns=""http://schemas.openxmlformats.org/spreadsheetml/2006/main"" xmlns:r=""http://schemas.openxmlformats.org/officeDocument/2006/relationships"" xmlns:mc=""http://schemas.openxmlformats.org/markup-compatibility/2006"" mc:Ignorable=""x15"" xmlns:x15=""http://schemas.microsoft.com/office/spreadsheetml/2010/11/main""><fileVersion appName=""xl"" lastEdited=""6"" lowestEdited=""6"" rupBuild=""14420""/><workbookPr defaultThemeVersion=""164011""/><mc:AlternateContent xmlns:mc=""http://schemas.openxmlformats.org/markup-compatibility/2006""><mc:Choice Requires=""x15""><x15ac:absPath url=""\\snnsvr045\NNSY Perm\T&amp;I Lab\NNSY IT Assistant\Documentation\"" xmlns:x15ac=""http://schemas.microsoft.com/office/spreadsheetml/2010/11/ac""/></mc:Choice></mc:AlternateContent><bookViews><workbookView xWindow=""0"" yWindow=""210"" windowWidth=""15495"" windowHeight=""6435""/></bookViews><sheets><sheet name=""Sheet1"" sheetId=""1"" r:id=""rId1""/></sheets><calcPr calcId=""162913""/><extLst>" & _ 
"<ext uri=""{140A7094-0E35-4892-8432-C4D2E57EDEB5}"" xmlns:x15=""http://schemas.microsoft.com/office/spreadsheetml/2010/11/main""><x15:workbookPr chartTrackingRefBase=""1""/></ext></extLst></workbook>", _
        False, True
    MkDir strTmpZipPath & "\" & "xl" & "\" & "_rels"
    WriteToFile _
        strTmpZipPath & "\" & "xl" & "\" & "_rels" & "\" & "workbook.xml.rels", _
        "<?xml version=""1.0"" encoding=""UTF-8"" standalone=""yes""?><Relationships xmlns=""http://schemas.openxmlformats.org/package/2006/relationships""><Relationship Id=""rId3"" Type=""http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles"" Target=""styles.xml""/><Relationship Id=""rId2"" Type=""http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme"" Target=""theme/theme1.xml""/><Relationship Id=""rId1"" Type=""http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet"" Target=""worksheets/sheet1.xml""/></Relationships>", _
        False, True
    MkDir strTmpZipPath & "\" & "xl" & "\" & "theme"
    WriteToFile _
        strTmpZipPath & "\" & "xl" & "\" & "theme" & "\" & "theme1.xml", _
"<?xml version=""1.0"" encoding=""UTF-8"" standalone=""yes""?>" & _
"<a:theme xmlns:a=""http://schemas.openxmlformats.org/drawingml/2006/main"" name=""Office Theme""><a:themeElements><a:clrScheme name=""Office""><a:dk1><a:sysClr val=""windowText"" lastClr=""000000""/></a:dk1><a:lt1><a:sysClr val=""window"" lastClr=""FFFFFF""/></a:lt1><a:dk2><a:srgbClr val=""44546A""/></a:dk2><a:lt2><a:srgbClr val=""E7E6E6""/></a:lt2><a:accent1><a:srgbClr val=""5B9BD5""/></a:accent1><a:accent2><a:srgbClr val=""ED7D31""/></a:accent2><a:accent3><a:srgbClr val=""A5A5A5""/></a:accent3><a:accent4><a:srgbClr val=""FFC000""/></a:accent4><a:accent5><a:srgbClr val=""4472C4""/></a:accent5><a:accent6><a:srgbClr val=""70AD47""/></a:accent6><a:hlink><a:srgbClr val=""0563C1""/></a:hlink><a:folHlink><a:srgbClr val=""954F72""/></a:folHlink></a:clrScheme><a:fontScheme name=""Office""><a:majorFont><a:latin typeface=""Calibri Light"" panose=""020F0302020204030204""/><a:ea typeface=""""/><a:cs typeface=""""/><a:font script=""Jpan"" typeface=""??????å? Light""/>" & _
"<a:font script=""Hang"" typeface=""?? ??""/><a:font script=""Hans"" typeface=""???? Light""/><a:font script=""Hant"" typeface=""?¼????w""/><a:font script=""Arab"" typeface=""Times New Roman""/><a:font script=""Hebr"" typeface=""Times New Roman""/><a:font script=""Thai"" typeface=""Tahoma""/><a:font script=""Ethi"" typeface=""Nyala""/><a:font script=""Beng"" typeface=""Vrinda""/><a:font script=""Gujr"" typeface=""Shruti""/><a:font script=""Khmr"" typeface=""MoolBoran""/><a:font script=""Knda"" typeface=""Tunga""/><a:font script=""Guru"" typeface=""Raavi""/><a:font script=""Cans"" typeface=""Euphemia""/><a:font script=""Cher"" typeface=""Plantagenet Cherokee""/><a:font script=""Yiii"" typeface=""Microsoft Yi Baiti""/><a:font script=""Tibt"" typeface=""Microsoft Himalaya""/><a:font script=""Thaa"" typeface=""MV Boli""/><a:font script=""Deva"" typeface=""Mangal""/><a:font script=""Telu"" typeface=""Gautami""/><a:font script=""Taml"" typeface=""Latha""/><a:font script=""Syrc"" typeface=""Estrangelo Edessa""/>" & _
"<a:font script=""Orya"" typeface=""Kalinga""/><a:font script=""Mlym"" typeface=""Kartika""/><a:font script=""Laoo"" typeface=""DokChampa""/><a:font script=""Sinh"" typeface=""Iskoola Pota""/><a:font script=""Mong"" typeface=""Mongolian Baiti""/><a:font script=""Viet"" typeface=""Times New Roman""/><a:font script=""Uigh"" typeface=""Microsoft Uighur""/><a:font script=""Geor"" typeface=""Sylfaen""/></a:majorFont><a:minorFont><a:latin typeface=""Calibri"" panose=""020F0502020204030204""/><a:ea typeface=""""/><a:cs typeface=""""/><a:font script=""Jpan"" typeface=""??????å?""/><a:font script=""Hang"" typeface=""?? ??""/><a:font script=""Hans"" typeface=""????""/><a:font script=""Hant"" typeface=""?¼????w""/><a:font script=""Arab"" typeface=""Arial""/><a:font script=""Hebr"" typeface=""Arial""/><a:font script=""Thai"" typeface=""Tahoma""/><a:font script=""Ethi"" typeface=""Nyala""/><a:font script=""Beng"" typeface=""Vrinda""/><a:font script=""Gujr"" typeface=""Shruti""/><a:font script=""Khmr"" typeface=""DaunPenh""/>" & _
"<a:font script=""Knda"" typeface=""Tunga""/><a:font script=""Guru"" typeface=""Raavi""/><a:font script=""Cans"" typeface=""Euphemia""/><a:font script=""Cher"" typeface=""Plantagenet Cherokee""/><a:font script=""Yiii"" typeface=""Microsoft Yi Baiti""/><a:font script=""Tibt"" typeface=""Microsoft Himalaya""/><a:font script=""Thaa"" typeface=""MV Boli""/><a:font script=""Deva"" typeface=""Mangal""/><a:font script=""Telu"" typeface=""Gautami""/><a:font script=""Taml"" typeface=""Latha""/><a:font script=""Syrc"" typeface=""Estrangelo Edessa""/><a:font script=""Orya"" typeface=""Kalinga""/><a:font script=""Mlym"" typeface=""Kartika""/><a:font script=""Laoo"" typeface=""DokChampa""/><a:font script=""Sinh"" typeface=""Iskoola Pota""/><a:font script=""Mong"" typeface=""Mongolian Baiti""/><a:font script=""Viet"" typeface=""Arial""/><a:font script=""Uigh"" typeface=""Microsoft Uighur""/><a:font script=""Geor"" typeface=""Sylfaen""/></a:minorFont></a:fontScheme>" & _
"<a:fmtScheme name=""Office""><a:fillStyleLst><a:solidFill><a:schemeClr val=""phClr""/></a:solidFill><a:gradFill rotWithShape=""1""><a:gsLst><a:gs pos=""0""><a:schemeClr val=""phClr""><a:lumMod val=""110000""/><a:satMod val=""105000""/><a:tint val=""67000""/></a:schemeClr></a:gs><a:gs pos=""50000""><a:schemeClr val=""phClr""><a:lumMod val=""105000""/><a:satMod val=""103000""/><a:tint val=""73000""/></a:schemeClr></a:gs><a:gs pos=""100000""><a:schemeClr val=""phClr""><a:lumMod val=""105000""/><a:satMod val=""109000""/><a:tint val=""81000""/></a:schemeClr></a:gs></a:gsLst><a:lin ang=""5400000"" scaled=""0""/></a:gradFill><a:gradFill rotWithShape=""1""><a:gsLst><a:gs pos=""0""><a:schemeClr val=""phClr""><a:satMod val=""103000""/><a:lumMod val=""102000""/><a:tint val=""94000""/></a:schemeClr></a:gs><a:gs pos=""50000""><a:schemeClr val=""phClr""><a:satMod val=""110000""/><a:lumMod val=""100000""/><a:shade val=""100000""/></a:schemeClr></a:gs>" & _
"<a:gs pos=""100000""><a:schemeClr val=""phClr""><a:lumMod val=""99000""/><a:satMod val=""120000""/><a:shade val=""78000""/></a:schemeClr></a:gs></a:gsLst><a:lin ang=""5400000"" scaled=""0""/></a:gradFill></a:fillStyleLst><a:lnStyleLst><a:ln w=""6350"" cap=""flat"" cmpd=""sng"" algn=""ctr""><a:solidFill><a:schemeClr val=""phClr""/></a:solidFill><a:prstDash val=""solid""/><a:miter lim=""800000""/></a:ln><a:ln w=""12700"" cap=""flat"" cmpd=""sng"" algn=""ctr""><a:solidFill><a:schemeClr val=""phClr""/></a:solidFill><a:prstDash val=""solid""/><a:miter lim=""800000""/></a:ln><a:ln w=""19050"" cap=""flat"" cmpd=""sng"" algn=""ctr""><a:solidFill><a:schemeClr val=""phClr""/></a:solidFill><a:prstDash val=""solid""/><a:miter lim=""800000""/></a:ln></a:lnStyleLst><a:effectStyleLst><a:effectStyle><a:effectLst/></a:effectStyle><a:effectStyle><a:effectLst/></a:effectStyle><a:effectStyle><a:effectLst>" & _
"<a:outerShdw blurRad=""57150"" dist=""19050"" dir=""5400000"" algn=""ctr"" rotWithShape=""0""><a:srgbClr val=""000000""><a:alpha val=""63000""/></a:srgbClr></a:outerShdw></a:effectLst></a:effectStyle></a:effectStyleLst><a:bgFillStyleLst><a:solidFill><a:schemeClr val=""phClr""/></a:solidFill><a:solidFill><a:schemeClr val=""phClr""><a:tint val=""95000""/><a:satMod val=""170000""/></a:schemeClr></a:solidFill><a:gradFill rotWithShape=""1""><a:gsLst><a:gs pos=""0""><a:schemeClr val=""phClr""><a:tint val=""93000""/><a:satMod val=""150000""/><a:shade val=""98000""/><a:lumMod val=""102000""/></a:schemeClr></a:gs><a:gs pos=""50000""><a:schemeClr val=""phClr""><a:tint val=""98000""/><a:satMod val=""130000""/><a:shade val=""90000""/><a:lumMod val=""103000""/></a:schemeClr></a:gs><a:gs pos=""100000""><a:schemeClr val=""phClr""><a:shade val=""63000""/><a:satMod val=""120000""/></a:schemeClr></a:gs></a:gsLst>" & _
"<a:lin ang=""5400000"" scaled=""0""/></a:gradFill></a:bgFillStyleLst></a:fmtScheme></a:themeElements><a:objectDefaults/><a:extraClrSchemeLst/><a:extLst><a:ext uri=""{05A4C25C-085E-4340-85A3-A5531E510DB2}""><thm15:themeFamily xmlns:thm15=""http://schemas.microsoft.com/office/thememl/2012/main"" name=""Office Theme"" id=""{62F939B6-93AF-4DB8-9C6B-D6C7DFDC589F}"" vid=""{4A3C46E8-61CC-4603-A589-7422A47A8E4A}""/></a:ext></a:extLst></a:theme>", _
        False, True
    MkDir strTmpZipPath & "\" & "xl" & "\" & "worksheets"
    WriteToFile _
        strTmpZipPath & "\" & "xl" & "\" & "worksheets" & "\" & "sheet1.xml", _
"<?xml version=""1.0"" encoding=""UTF-8"" standalone=""yes""?>" & _
"<worksheet xmlns=""http://schemas.openxmlformats.org/spreadsheetml/2006/main"" xmlns:r=""http://schemas.openxmlformats.org/officeDocument/2006/relationships"" xmlns:mc=""http://schemas.openxmlformats.org/markup-compatibility/2006"" mc:Ignorable=""x14ac"" xmlns:x14ac=""http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac""><dimension ref=""A1""/><sheetViews><sheetView tabSelected=""1"" workbookViewId=""0""/></sheetViews><sheetFormatPr defaultRowHeight=""15"" x14ac:dyDescent=""0.25""/><sheetData/><pageMargins left=""0.7"" right=""0.7"" top=""0.75"" bottom=""0.75"" header=""0.3"" footer=""0.3""/></worksheet>", _
        False, True
    ZipAFolder strTmpZipPath, _
        strLocalAppTmp  & "\" & "EmptyExcelFile.zip"
    moveFile strLocalAppTmp  & "\" & "EmptyExcelFile.zip", strNewExcelFile
End Sub 

'Dependancies NONE
'Version 1.0.0
'By jeremy.gerdes@navy.mil
Public Sub moveFile(strSourcePath, strDestinationPath)
    Dim fso
    Set fso = CreateObject("Scripting.FileSystemObject")
    'Does the source file exist?
    If FileExists(strSourcePath) Then
        'If the destination is a folder then move the file into the folder preserving the source name
        If FolderExists(strDestinationPath) Then
             strDestinationPath = strDestinationPath & "\" & fso.GetFileName(strSourcePath)
        End If
        'If the destination allready exists, attempt to delete it... this move method allways over writes
        If FileExists(strDestinationPath) Then
           fso.DeleteFile strDestinationPath, True
        End If
        'If the destination path doesn't exist attempt to make it
        If Not FolderExists(fso.GetParentFolderName(strDestinationPath)) Then
            MkDir (fso.GetParentFolderName(strDestinationPath))
        End If
        'Move the file
        fso.moveFile strSourcePath, strDestinationPath
    End If
End Sub

Public Sub WriteToFile(ByRef strFileName, ByRef strContent, ByRef fOpenFile, ByRef fOverwrite)
    Dim tf ' As Object
    Dim FSO ' As Object
    Set FSO = CreateObject("Scripting.FileSystemObject")
    If FSO.FileExists(strFileName) Then
        If fOverwrite Then
            FSO.DeleteFile strFileName
        End If
    End If
    Set tf = FSO.OpenTextFile(strFileName, 8, True)
    tf.WriteLine strContent
    tf.Close
    If fOpenFile Then
        OpenWithExplorer strFileName
    End If
    'Clean up
    Set tf = Nothing
    Set FSO = Nothing
End Sub

Sub ZipAFolder (sFolder, zipFile)
    'From /a/15143587/1146659
    With CreateObject("Scripting.FileSystemObject")
        zipFile = .GetAbsolutePathName(zipFile)
        sFolder = .GetAbsolutePathName(sFolder)

        With .CreateTextFile(zipFile, True)
            .Write Chr(80) & Chr(75) & Chr(5) & Chr(6) & String(18, chr(0))
        End With
    End With

    With CreateObject("Shell.Application")
        .NameSpace(zipFile).CopyHere .NameSpace(sFolder).Items

        Do Until .NameSpace(zipFile).Items.Count = _
                 .NameSpace(sFolder).Items.Count
            WScript.Sleep 200
        Loop
    End With

End Sub

Public Sub OpenWithExplorer(ByRef strFilePath)
    Dim wshShell
    Set wshShell = CreateObject("WScript.Shell")
    wshShell.Exec ("Explorer.exe " & strFilePath)
    Set wshShell = Nothing
End Sub

Public Function Environ(ByRef strName)
    'Replaces VBA.Envrion Public Function with wscript version for use in all VB engines
    Dim wshShell: Set wshShell = CreateObject("WScript.Shell")
    Dim strResult: strResult = wshShell.ExpandEnvironmentStrings("%" & strName & "%")
    'wshShell.ExpandEnvironmentStrings behaves differently than VBA.Environ when no environment variable is found,
    '  conforming all results to return nothing if no result was found, like VBA.Environ
    If strResult = "%" & strName & "%" Then
        Environ = vbNullString
    Else
        Environ = strResult
    End If
    'cleanup
    Set wshShell = Nothing
End Function

' Return true if file exists and false if file does not exist
Public Function FileExists(ByVal strPath) ' As String) As Boolean
Dim FSO 'As Object
    Set FSO = CreateObject("Scripting.FileSystemObject")
    FileExists = FSO.FileExists(strPath)
    ' Clean up
    Set FSO = Nothing
End Function

Public Function FolderExists(ByVal strPath) 'As String) As Boolean
Dim FSO ' As Object
    ' Note I used to use the vba.Dir Public Function but using that Public Function
    ' will lock the folder and prevent it from being deleted.
    Set FSO = CreateObject("Scripting.FileSystemObject")
    FolderExists = FSO.FolderExists(strPath)
    ' Clean up
    Set FSO = Nothing
End Function

Function MkDir(strPath)
    ' Version: 1.0.3
    ' Dependancies: NONE
    ' Returns: True if no errors, i.e. folder path allready existed, or was able to be created without errors
    ' Usage Example: MkDir Environ("temp") & "\" & "opsRunner"
    ' Emulates linux 'MkDir -p' command:  creates folders without complaining if it allready exists
    ' Superceeds the the VBA.MkDir function, but requires that drive be included in strPath
    ' By jeremy.gerdes@navy.mil
    Dim fso ' As Scripting.FileSystemObject
    Set fso = CreateObject("Scripting.FileSystemObject") ' New Scripting.FileSystemObject
    If Not fso.FolderExists(strPath) Then
        On Error Resume Next
        Dim fRestore ' As Boolean
        fRestore = False
        'Handle Network Paths
        If Left(strPath, 2) = "\\" Then
            strPath = Right(strPath, Len(strPath) - 2)
            fRestore = True
        End If
        Dim arryPaths 'As Variant
        arryPaths = Split(strPath, "\")
        'Restore Server file path prefix
        If fRestore Then
            arryPaths(0) = "\\" & arryPaths(0)
        End If
        Dim intDir ' As Integer
        Dim strBuiltPath ' As String
        For intDir = LBound(arryPaths) To UBound(arryPaths)
            strBuiltPath = strBuiltPath & arryPaths(intDir) & "\"
            If Not fso.FolderExists(strBuiltPath) Then
                fso.CreateFolder strBuiltPath
            End If
        Next
    End If
    MkDir = (Err.Number = 0)
    'cleanup
    Set fso = Nothing
End Function

'Dependencies: NONE
'--- This function modified from: https://www.reddit.com/r/vba/comments/aom8xs/how_to_tell_if_script_is_running_in_vba_vbscript/ei0z2ll?utm_source=share&utm_medium=web2x&context=3
'--- Returns a string containing which script engine this is running in. Modified to test that wscript has a property 'Version' to allow for wscript emulation in the VBIDE
'--- Will return either "VBS","VBA", or "HTA".
Function ScriptEngine()
    On Error Resume Next
    ScriptEngine = "VBA"
    Dim tmp
    tmp = wscript.Version
    If Err.Number = 0 Then
        ScriptEngine = "VBS"
    End If
    Err.Clear
    ReDim window(0)
    If Err.Number = 501 Then
        ScriptEngine = "HTA"
    End If
    On Error GoTo 0
End Function

'Dependencies: ScriptEngine
Function GetCurrentFileFolder()
    Select Case ScriptEngine()
        Case "VBS"
            GetCurrentFileFolder = Left(wscript.ScriptFullName, Len(wscript.ScriptFullName) - Len(wscript.ScriptName) - 1)
        Case "VBA"
            Select Case Application.Name
                Case "Microsoft Word"
                    GetCurrentFileFolder = ThisDocument.Path
                Case "Microsoft Access"
                    GetCurrentFileFolder = CurrentProject.Path
                Case "Microsoft Excel"
                    GetCurrentFileFolder = ThisWorkbook.Path
            End Select
            'Not going to bother checking for other VBA contexts like powerpoint, visio, ms project or autocad.
        Case "HTA"
            '----------------------------------------------------------------------
            ' - There are several methods to get the current directory of the HTA -
            '----------------------------------------------------------------------
            'From testing don't use the following
            'This method drops the server path for network paths
            'strPath =  Left(Document.Location.pathname, InStrRev(Document.Location.pathname, "\") - 1) & "\Main.hta"
            'This method works fine if the HTA directly executed,
            'but if explorer.exe or cscript.exe executes the hta this method returns the %windir% dictory
            'Dim objScripShell
            'Set objScripShell = CreateObject("WScript.Shell")
            'strPath =  objScripShell.CurrentDirectory & "\Main.hta"
            Dim strPath
            strPath = jsUrlDecode(Document.Location.href)
            strPath = Replace(strPath, "/", "\")
            strPath = Left(strPath, InStrRev(strPath, "\") - 1)

            'URLs that begin with a drive letter will begin with 'file:\\\' Check this first
            If Left(strPath, 8) = "file:\\\" Then
            strPath = Right(strPath, Len(strPath) - 8)
            End If

            'URLs that begin with a server name will begin with 'file:'
            If Left(strPath, 5) = "file:" Then
            strPath = Right(strPath, Len(strPath) - 5)
            End If
            GetCurrentFileFolder = strPath
    End Select
End Function

'BuildEmptyExcelFile GetCurrentFileFolder & "\" & "anEmptyExcelFile.xlsx"