วิธีหนึ่งในการใช้ Excel ใน ASP คือการเชื่อมโยงไฟล์ Excel เป็นฐานข้อมูล จากนั้นการดำเนินการจะคล้ายกับการดำเนินการฐานข้อมูลการเข้าถึง อย่างไรก็ตาม วิธีการนี้ไม่มีประโยชน์เสมอไป เนื่องจาก Excel ไม่ใช่ฐานข้อมูลเชิงสัมพันธ์ สำหรับรูปแบบคงที่ซึ่งมีการรวมเซลล์ที่ซับซ้อน สไตล์เส้นขอบ รูปแบบ ความสัมพันธ์ของสูตรระหว่างเซลล์ ฯลฯ ฉันคิดว่าวิธีที่ง่ายที่สุดที่จะเข้าใจคือการเปิดการตั้งค่าที่มีอยู่ในพื้นหลัง สร้างไฟล์เทมเพลต จากนั้นแทรกข้อมูลที่ จำเป็น บันทึก และส่งออก...
วิธีที่กล่าวถึงในที่นี้คือการสร้างออบเจ็กต์ Excel โดยตรง ซึ่งทำให้ดำเนินการต่างๆ บนเอกสาร Excel ในเบื้องหลังได้ง่ายขึ้น
อีกสิ่งหนึ่งที่ต้องตั้งค่าบนฝั่งเซิร์ฟเวอร์คือการอนุญาตการดำเนินการของส่วนประกอบ COM พิมพ์ "DCOMCNFG" บนบรรทัดคำสั่งเพื่อเข้าสู่อินเทอร์เฟซการกำหนดค่าคอมโพเนนต์ COM เลือก Microsoft Excel และคลิกปุ่มคุณสมบัติ เลือกกำหนดเองสำหรับตัวเลือกวิทยุทั้งสามรายการ ในระหว่างการแก้ไข ให้เพิ่มทุกคนในการอนุญาตทั้งหมด หลังจากบันทึกแล้ว ให้รีสตาร์ทเซิร์ฟเวอร์
มันสำคัญมาก หากไม่ได้ตั้งค่าคอมพิวเตอร์เครื่องอื่นจะไม่สามารถสร้างวัตถุ Excel ได้สำเร็จ
อย่างไรก็ตาม วิธีการนี้มีข้อบกพร่องเช่นกัน ในการทำงานจริงของฉัน หากมีไฟล์ Excel ที่เปิดอยู่บนเซิร์ฟเวอร์แล้วจึงเรียกใช้ไฟล์เดียวกัน ฉันก็ยังไม่เข้าใจว่าทำไมจึงมีอยู่บ้าง สถานที่ที่ยังไม่ได้ตั้งขึ้น
นอกจากนี้ รูปแบบโค้ดตัวอย่างในบทความที่อ้างถึงข้างต้นยังไม่สมบูรณ์ และการขึ้นบรรทัดใหม่และการเว้นวรรคจำนวนมากไม่อยู่ในรูปแบบที่ถูกต้อง หากโค้ดเสร็จสมบูรณ์ เพียงคัดลอกโค้ดแล้วโค้ดจะทำงานได้สำเร็จ จากนั้นค่อย ๆ ค้นคว้า และแก้ไขมันและง่ายต่อการเริ่มต้น ตอนนี้โค้ดที่แก้ไขมีดังนี้ (ส่วนที่วาดแผนภูมิถูกลบไปแล้ว):
-
เมื่อเกิดข้อผิดพลาด ดำเนินการต่อต่อไป
strAddr=Server.MapPath(".")
ตั้ง objExcelApp=CreateObject("Excel.Application")
objExcelApp.DisplayAlerts=false
objExcelApp.Application.Visible=false
objExcelApp.WorkBooks.Open(strAddr&"TempletNull.xls")
ตั้งค่า objExcelBook=objExcelApp.ActiveWorkBook
ตั้งค่า objExcelSheets=objExcelBook.Worksheets
set objExcelSheet=objExcelBook.Sheets(1)
objExcelSheet.Range("B2:k2").Value=Array("Week1", "Week2", "Week3", "Week4", "Week5", "Week6", "Week7" ")
objExcelSheet.Range("B3:k3").Value=Array("67", "87", "5", "9", "7", "45", "45", "54", "54" ,"10")
objExcelSheet.Range("B4:k4").Value=Array("10", "10", "8", "27", "33", "37", "50", "54", "10" ,"10")
objExcelSheet.Range("B5:k5").Value=Array("23", "3", "86", "64", "60", "18", "5", "1", "36" ,"80")
objExcelSheet.Cells(3,1).Value="InternetExplorer"
objExcelSheet.Cells(4,1).Value="Netscape"
objExcelSheet.Cells(5,1).Value="อื่น ๆ"
objExcelSheet.Range("b2:k5").เลือก
SaveAs(strAddr&"TempExcel.xls")
objExcelApp ออก
ตั้ง objExcelApp=ไม่มีอะไร
-
<!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.0Transitional//EN">
<HTML>
<หัว>
<TITLE>เอกสารใหม่</TITLE>
<METANAME="เครื่องกำเนิดไฟฟ้า"CONTENT=" MicrosoftFrontPage5.0">
<METANAME="ผู้เขียน"CONTENT="">
<METANAME="คำหลัก"CONTENT="">
<METANAME="คำอธิบาย"CONTENT="">
</HEAD>
<ร่างกาย>
</ร่างกาย>
</HTML>
หลังจากใช้งานไฟล์ Excel คุณจะต้องส่งออกไฟล์ หากต้องการดำเนินการจริง ให้ใช้วิธีเปลี่ยนเส้นทางไปยัง Excel ของ ASP บางครั้งอาจเปิดขึ้นโดยตรงใน IE และบางครั้งหน้าต่าง "ดาวน์โหลด, เปิด, บันทึก" จะปรากฏขึ้นหากคุณต้องการ หากต้องการเปิดโดยตรงใน IE เพียงใช้ FSO เพื่อโหลดไฟล์ Excel แล้วส่งออกใน IE
<%
Dim Fso,FileExt,strFilePath,Mime
strFilePath = "f:aspxuexi.doc"
ตั้งค่า Fso=Server.CreateObject("Scripting.FileSystemObject")
FileExt = Fso.GetExtensionName(strFilePath)
ตั้งค่า fso=Nothing
เลือก Case FileExt
กรณี "เอกสาร"
Mime = "แอปพลิเคชัน / msword"
กรณี "xls"
Mime = "แอปพลิเคชัน / msexcel"
สิ้นสุดการเลือก
การโทรออก (strFilePath,Mime)
'####################################### # #############
ฟังก์ชั่น OutPut (strFilePath, Mime)
Response.ContentType = Mime
ค่าคงที่ adTypeBinary = 1
ตั้ง objStream = Server.CreateObject("ADODB.Stream")
objStream.เปิด
objStream.Type = adTypeBinary
objStream.LoadFromFile strFilePath
Response.BinaryWrite objStream อ่าน
objStream ปิด
ตั้งค่า objStream = ไม่มีเลย
ฟังก์ชันสิ้นสุด
'######################################################################## ## ###
-
ในการใช้งานจริง เมื่อเซิร์ฟเวอร์รันโปรแกรม Excel หรือ ACCESS ลูกค้าจะส่งเพื่อสร้าง Excel วัตถุแอปพลิเคชันไม่สำเร็จ ในสถานการณ์อื่น เมื่อลูกค้าส่งคำขอ มันจะไม่สิ้นสุด และคำขอที่ส่งโดยลูกค้ารายอื่นจะไม่สำเร็จ! อาจมีวิธีแก้ไขอื่นสำหรับปัญหานี้ แต่อย่างน้อยก็ไม่เสถียร
มีตัวอย่างความสำเร็จที่เกี่ยวข้องเกิดขึ้นบนอินทราเน็ตของแผนกของเรา เมื่อฉันขุดมันออกมา ฉันพบว่าพวกเขากำลังสร้าง Excel บนไคลเอนต์ แอปพลิเคชัน. ด้วยวิธีนี้จะไม่มีข้อขัดแย้งในฝั่งเซิร์ฟเวอร์อีกต่อไป สำหรับไคลเอนต์ เนื่องจากทำงานใน LAN ระดับความปลอดภัยของไคลเอนต์ IE จึงสามารถตั้งค่าต่ำและใช้งานที่เกี่ยวข้องได้ (การตรวจสอบ) แม้ว่าจะไม่มีการตั้งค่าก็ตาม IE จะแสดงหน้าต่างคำเตือนปรากฏขึ้น: "คุณได้รับอนุญาตให้เรียกใช้หรือไม่ activeX?"
โค้ดที่นำไปใช้จะคล้ายกับบันทึกก่อนหน้า และเป็นดังนี้:
<script language="vbscript">
ตั้ง objExcelApp=CreateObject("Excel.Application")
objExcelApp.DisplayAlerts=true
objExcelApp.WorkBooks.Open(" http://XXX.XXX.XXX/XXX.xls ")
'ไฟล์ xls ของที่อยู่เครือข่ายที่สมบูรณ์ ไฟล์นี้ได้รับการฟอร์แมต พิมพ์ และบันทึกบนเซิร์ฟเวอร์
ตั้งค่า objExcelBook=objExcelApp.ActiveWorkBook
ตั้งค่า objExcelSheets=objExcelBook.Worksheets
ตั้ง objExcelSheet=objExcelBook.Sheets(1)
'====นี่คือคำสั่งสำหรับการกรอกข้อมูลในเซลล์ Excel หากข้อมูลถูกแยกออกจากฐานข้อมูล โปรแกรมพื้นหลังสามารถสร้างคำสั่งเหล่านี้ได้:
'ตัวอย่าง: response.write "objExcelSheet.Range(""B2"").Value="""&rs("XXX")&""""
'หรือ objExcelSheet.Range("B2").Value="<%=rs("XXX")%>"
objExcelSheet.Range("B2:k2").Value=Array("Week1","Week2"," สัปดาห์ที่ 3", "สัปดาห์ที่ 4", "สัปดาห์ที่ 5", "สัปดาห์ที่ 6", "สัปดาห์ที่ 7")
objExcelSheet.Range("B3:k3").Value=Array("67", "87", "5", "9", "7", "45", "45", "54", "54" ,"10")
objExcelSheet.Range("B4:k4").Value=Array("10", "10", "8", "27", "33", "37", "50", "54", "10" ,"10")
objExcelSheet.Range("B5:k5").Value=Array("23", "3", "86", "64", "60", "18", "5", "1", "36" ,"80")
objExcelSheet.Cells(3,1).Value="InternetExplorer"
objExcelSheet.Cells(4,1).Value="Netscape"
objExcelSheet.Cells(5,1).Value="อื่น ๆ"
'==================
'objExcelApp.Quit
'set objExcelApp=Nothing
</script>
ในโค้ดข้างต้น
'objExcelApp.Quit'
'set objExcelApp=ไม่มี
การใช้สิ่งใดในการยกเลิก เนื่องจากอย่าปิด excel.aplicaition ที่นี่ มิฉะนั้น Excel จะถูกปิดหลังจากกรอกข้อมูลแล้ว ในขณะนี้ ไฟล์ Excel ที่เปิดบนไคลเอนต์จำเป็นต้องได้รับการแก้ไขหรือพิมพ์โดยไคลเอนต์ ในเวลาเดียวกัน ออบเจ็กต์ objexcelapp ยังมีวิธีสำหรับการตั้งค่าการพิมพ์และการเข้าสู่อินเทอร์เฟซตัวอย่างก่อนพิมพ์ โปรดดูข้อมูลที่เกี่ยวข้องกับ Excel ที่เกี่ยวข้อง