Excel“ ตารางภายนอกไม่ได้อยู่ในรูปแบบที่คาดหมาย”


162

ฉันพยายามอ่านไฟล์ Excel (xlsx) โดยใช้รหัสที่แสดงด้านล่าง ฉันได้รับ "ตารางภายนอกไม่ได้อยู่ในรูปแบบที่คาดหวัง" ข้อผิดพลาดยกเว้นว่าฉันมีไฟล์ที่เปิดอยู่แล้วใน Excel กล่าวอีกนัยหนึ่งฉันต้องเปิดไฟล์ใน Excel ก่อนจึงจะสามารถอ่านได้จากโปรแกรม C # ของฉัน ไฟล์ xlsx อยู่ในเครือข่ายของเรา ฉันจะอ่านไฟล์โดยไม่ต้องเปิดไฟล์ก่อนได้อย่างไร? ขอบคุณ

string sql = "SELECT * FROM [Sheet1$]";
string excelConnection = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + pathname + ";Extended Properties=\"Excel 8.0;HDR=YES;IMEX=1;\"";

using (OleDbDataAdapter adaptor = new OleDbDataAdapter(sql, excelConnection)) {
    DataSet ds = new DataSet();
    adaptor.Fill(ds);
}

FWIW ฉันได้รับสิ่งนี้ในแผ่นงาน excel เมื่อพยายามเปิดมันฉันใช้ ACE ปัจจุบันและคุณสมบัติเพิ่มเติมที่แนะนำ เมื่อฉันเปิดไฟล์ด้วยตนเองจะมีพรอมต์ที่ด้านบนเพื่อเปิดใช้งานการแก้ไขฉันต้องจัดเรียงวิธีพลิกบิตโดยอัตโนมัติ แต่ถ้าคุณได้รับสิ่งนี้คุณอาจต้องเปิดไฟล์และเปิดใช้งานการแก้ไข . ฉันอาจจะดูว่าฉันสามารถเปิดไฟล์แบบอ่านอย่างเดียวได้หรือเปล่าฉันเห็นบางสิ่งที่ไกลมากในกระทู้เกี่ยวกับเรื่องนี้
Jeff Patton

คำตอบ:


246

"ตารางภายนอกไม่อยู่ในรูปแบบที่คาดหมาย" โดยทั่วไปแล้วจะเกิดขึ้นเมื่อพยายามใช้ไฟล์ Excel 2007 ที่มีสตริงการเชื่อมต่อที่ใช้: Microsoft.Jet.OLEDB.4.0 และ Extended Properties = Excel 8.0

การใช้สตริงการเชื่อมต่อต่อไปนี้ดูเหมือนว่าจะแก้ไขปัญหาส่วนใหญ่

public static string path = @"C:\src\RedirectApplication\RedirectApplication\301s.xlsx";
public static string connStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";Extended Properties=Excel 12.0;";

10
กระแทกแดกดันฉันได้รับข้อผิดพลาดนี้จากแอปพลิเคชันของบุคคลอื่น (Scribe) แต่คำอธิบายยังคงแก้ปัญหาสำหรับฉัน: "บันทึกเป็น" Excel 97-2003 และแก้ไขข้อผิดพลาด
Jeff Davis

4
นามสกุล. xlsx หรือ. xls
FAtBalloon

3
คุณอาจต้องติดตั้งสิ่งนี้ก่อน: microsoft.com/en-us/download/confirmation.aspx?id=23734
rovsen

11
อาจไม่น่าเชื่อ แต่ฉันเปลี่ยนชื่อชีตเป็นตัวพิมพ์เล็กทั้งหมดและใช้ชีต 1 $
สมิ ธ

3
ฉันใช้ LinqToExcel และเพื่อให้ LinqToExcel ใช้สตริงข้อความค้นหานั้นฉันต้องเปลี่ยนชื่อไฟล์เป็น xlsx สเปรดชีตที่เป็นปัญหาจริงๆคือสเปรดชีต excel 97 แต่ผู้ให้บริการ odbc ดูเหมือนจะไม่สนใจสิ่งนั้น เมื่อฉันหลอก LinqToExcel ให้ใช้สตริงข้อความค้นหาที่ถูกต้องผู้ให้บริการจะกำหนดวิธีการอ่านไฟล์ที่เป็นอิสระจากส่วนขยายของไฟล์ ช่องโหว่ที่สะดวกในกรณีของฉัน
Tim Coker

26

ขอบคุณสำหรับรหัสนี้ :) ฉันซาบซึ้งจริงๆ ได้ผลสำหรับฉัน

public static string connStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";Extended Properties=Excel 12.0;";

ดังนั้นหากคุณมีไฟล์ Excel รุ่นต่าง ๆ ให้รับชื่อไฟล์หากนามสกุลเป็น. xlsxให้ใช้สิ่งนี้:

Private Const connstring As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";Extended Properties=Excel 12.0;";

และถ้าเป็น. xlsให้ใช้:

Private Const connstring As String = "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" + path + ";Extended Properties=""Excel 8.0;HDR=YES;"""

5
FYI: นี่จะเป็นการโยน OleDbException ถ้าคุณพยายามเปิด.xlsไฟล์บนพีซีที่ไม่มีJet OleDb ติดตั้งอยู่
jp2code

@Trex คุณแน่ใจหรือว่าบรรทัดสุดท้ายของรหัสนั้นถูกต้อง? คุณสามารถตรวจสอบอีกครั้งในเครื่องมือแก้ไขอีกครั้งได้หรือไม่?
Jogi

15

(ฉันมีชื่อเสียงต่ำเกินกว่าจะแสดงความคิดเห็น แต่นี่เป็นความคิดเห็นในรายการของ JoshCaba โดยใช้ Ace-engine แทน Jet สำหรับ Excel 2007)

หากคุณไม่ได้ติดตั้ง / ลงทะเบียน Ace บนเครื่องของคุณคุณสามารถรับได้ที่: https://www.microsoft.com/en-US/download/details.aspx?id=13255

มันใช้สำหรับ Excel 2010 เช่นกัน


ฉันติดตั้งเอนจิ้น ACE แล้ว แต่ฉันจำเป็นต้องรู้ว่าการอ้างอิง II ต้องรวมไว้ในโครงการของฉันอย่างไรเพื่อให้ตัวติดตั้งของฉันรวม เครื่องบางเครื่องที่ติดตั้งแอพของฉันอาจจำเป็นต้องติดตั้ง MS Office
jp2code

1
การเชื่อมโยงในขณะนี้จะช่วยให้ข้อผิดพลาด We're sorry, this download is no longer available-
RBT

9

เพียงเพิ่มเคสของฉัน ไฟล์ xls ของฉันถูกสร้างขึ้นโดยฟังก์ชั่นการส่งออกข้อมูลจากเว็บไซต์ส่วนขยายของไฟล์คือ xls โดยปกติจะสามารถเปิดได้โดย MS Excel 2003 แต่ Microsoft.Jet.OLEDB.4.0 และ Microsoft.ACE.OLEDB.12.0 ทั้งสองได้รับ " ตารางภายนอกไม่ได้อยู่ในข้อยกเว้นของรูปแบบที่คาดหวัง

ในที่สุดปัญหาคือเช่นเดียวกับข้อยกเว้นกล่าวว่า "มันไม่ได้อยู่ในรูปแบบที่คาดหวัง" แม้ว่าชื่อนามสกุลจะเป็น xls แต่เมื่อฉันเปิดด้วยโปรแกรมแก้ไขข้อความจริงๆแล้วมันเป็นไฟล์ html ที่มีรูปแบบที่ดีข้อมูลทั้งหมดอยู่ใน <table> แต่ละ <tr> เป็นแถวและแต่ละ <td> เป็น เซลล์ จากนั้นฉันคิดว่าฉันสามารถแยกวิเคราะห์ได้ในรูปแบบ html


นี่เป็นกรณีของฉันเช่นกัน แต่ไฟล์ของฉันเป็น XML จริงๆ ยังคงเป็นการดีที่จะรู้วิธีนำเข้าโดยใช้ OBDC แต่ฉันไม่คิดว่ามันรองรับ
David Rogers

@DavidRogers ผมเคยเห็นบางสิ่งบางอย่างเช่น XML โปรแกรมควบคุม ODBC แต่ไม่เคยใช้คุณมีลักษณะที่cdata.com/drivers/xml/odbc
Joseph Ding

กรณีเดียวกันที่นี่ฉันเดาว่าความมหัศจรรย์เริ่มต้นที่การเปิดไฟล์ด้วยแผ่นจดบันทึกจริง ๆ แล้วฉันโหวตให้คำตอบของคุณเพราะฉันไม่ได้เลื่อนลงเพื่อดูโพสต์ของคุณจนถึงตอนนี้ (และตอนนี้ฉันเปิดไฟล์ / วิเคราะห์แล้ว ด้วย Html Agility pack ... ) แต่คำตอบของคุณควรอยู่ที่จุดสูงสุดโดยตรรกะที่บริสุทธิ์: เปิดไฟล์แรก! และดูว่ามันมีไฟล์สไตล์ Excel-ish อยู่หรือไม่!
Gabriel G

หากเป็นไฟล์ html ให้ใช้คุณสมบัติเพิ่มเติมเช่น:Extended Properties=""HTML Import;HDR=No;IMEX=1
Nepaluz

4

ผมมีปัญหาเหมือนกัน. ซึ่งแก้ไขได้โดยใช้ขั้นตอนเหล่านี้:

1. ) คลิกไฟล์

2. ) เลือก "บันทึกเป็น"

3. ) คลิกที่เลื่อนลง (บันทึกเป็นประเภท)

ป้อนคำอธิบายรูปภาพที่นี่

4. ) เลือกสมุดงาน Excel 97-2003

ป้อนคำอธิบายรูปภาพที่นี่

5. ) คลิกที่ปุ่มบันทึก

ป้อนคำอธิบายรูปภาพที่นี่


1
Boo! การแปลงเป็นรูปแบบไฟล์ที่ล้าสมัยไม่ควรพิจารณาด้วยซ้ำ ในช่วงเวลาของคำตอบนี้รูปแบบ 97-2003 มีอายุ 16 ปีและ 12 ปีที่ล้าสมัย ฉันสามารถเข้าใจได้สองสามปี แต่ล้าสมัยเกินสิบปีไม่ควรแนะนำให้นักพัฒนามืออาชีพทราบว่ารูปแบบไฟล์ต้องเก่ากว่า
Lemiarty

3

ฉันมีปัญหาเดียวกันนี้ (การใช้ ACE.OLEDB) และสิ่งที่แก้ไขให้ฉันได้คือลิงค์นี้:

http://support.microsoft.com/kb/2459087

ส่วนสำคัญของมันคือการติดตั้งหลายรุ่นสำนักงานและ sdk ของสำนักงานต่างๆประกอบ ฯลฯ ได้นำไปสู่การอ้างอิง ACEOleDB.dll ในรีจิสทรีที่ชี้ไปที่โฟลเดอร์ OFFICE12 แทน OFFICE14 ใน

C: \ Program Files \ Common Files \ Microsoft Shared \ OFFICE14 \ ACEOLEDB.DLL

จากลิงค์:

หรือคุณสามารถปรับเปลี่ยนรีจิสทรีคีย์ที่เปลี่ยนเส้นทาง dll ให้ตรงกับรุ่น Access ของคุณ

Access 2007 ควรใช้ OFFICE12, Access 2010 - OFFICE14 และ Access 2013 - OFFICE15

(OS: 64 บิต Office: 64 บิต) หรือ (OS: 32 บิต Office: 32 บิต)

รหัส: HKCR \ CLSID {3BE786A0-0366-4F5C-9434-25CF162E475E} \ InprocServer32 \

ชื่อค่า: (ค่าเริ่มต้น)

ข้อมูลค่า: Shared \ OFFICE14 \ ACEOLEDB.DLL Files \ Common Files \ Microsoft C: \ Program

(ระบบปฏิบัติการ: 64 บิต Office: 32 บิต)

รหัส: HKCR \ Wow6432Node \ CLSID {3BE786A0-0366-4F5C-9434-25CF162E475E} \ InprocServer32 \

ชื่อค่า: (ค่าเริ่มต้น)

ข้อมูลค่า: C: \ Program Files \ Microsoft Shared \ OFFICE14 \ ACEOLEDB.DLL Files \ Microsoft (x86) \ Common


ฉันพบว่าการไปที่โปรแกรมและคุณสมบัติและซ่อมแซม ACE ง่ายขึ้น (สำหรับฉัน ACE ชื่อ Microsoft Access Runtime 2016) ฉันคิดว่าฉันมีปัญหานี้หลายอย่างและ Repair นั้นเพิ่งรีเซ็ตรีจิสตรีคีย์ทั้งหมดให้ฉันโดยที่ฉันไม่ต้องกังวลกับ regedit ;-)
binki

2

ฉันได้เห็นข้อผิดพลาดนี้เมื่อพยายามใช้สูตร INDIRECT () ที่ซับซ้อนบนแผ่นงานที่กำลังนำเข้า ฉันสังเกตสิ่งนี้เพราะนี่เป็นข้อแตกต่างเพียงอย่างเดียวระหว่างสองสมุดงานที่มีการนำเข้าหนึ่งเล่มและอีกเล่มหนึ่งไม่ใช่ ทั้งคู่เป็นไฟล์ 2007+ .XLSX และติดตั้งเอ็นจิ้น 12.0

ฉันยืนยันว่านี่เป็นปัญหาโดย:

  • การทำสำเนาไฟล์ (ยังมีปัญหาอยู่ดังนั้นจึงไม่มีความแตกต่างในการบันทึก)
  • การเลือกเซลล์ทั้งหมดในแผ่นงานด้วยสูตรทางอ้อม
  • การวางเป็นค่าเท่านั้น

และข้อผิดพลาดก็หายไป


2

ฉันได้รับข้อผิดพลาดจากบุคคลที่สามและ Oledb อ่านสมุดงาน XLSX ปัญหานี้ดูเหมือนจะเป็นแผ่นงานที่ซ่อนอยู่ซึ่งทำให้เกิดข้อผิดพลาด การซ่อนแผ่นงานเปิดใช้งานสมุดงานเพื่อนำเข้า


2

หากไฟล์เป็นแบบอ่านอย่างเดียวให้ลบออกและควรจะทำงานอีกครั้ง


1

วิ่งเข้าไปในปัญหาเดียวกันและพบกระทู้นี้ ไม่มีข้อเสนอแนะใด ๆ ข้างต้นที่ช่วยยกเว้นความเห็นของ @ Smith ต่อคำตอบที่ยอมรับในวันที่ 17 เมษายน 13

พื้นหลังของปัญหาของฉันอยู่ใกล้กับ @ zhiyazw โดยทั่วไปแล้วพยายามตั้งค่าไฟล์ Excel ที่ส่งออก (SSRS ในกรณีของฉัน) เป็นแหล่งข้อมูลในแพ็คเกจ dtsx ทุกอย่างที่ฉันทำหลังจากแก้ไขมันแล้วก็เปลี่ยนชื่อเวิร์กชีท ไม่จำเป็นต้องเป็นตัวพิมพ์เล็กตามที่ @Smith แนะนำ

ฉันคิดว่า ACE OLEDB คาดว่าไฟล์ Excel จะติดตามโครงสร้าง XML บางอย่าง แต่บริการรายงานไม่ได้รับรู้สิ่งนั้น


ฉันพบปัญหาเดียวกันของตารางที่ไม่ได้อยู่ในรูปแบบที่คาดไว้ ฉันตรวจสอบว่าสมุดงานของฉันไม่มีแผ่นงานที่ซ่อนอยู่ ชื่อเวิร์กชีทจริงในเวิร์กบุ๊กเป็นตัวพิมพ์ใหญ่ แต่ในรหัส C # เพื่อแยกไฟล์ที่ฉันเพิ่ม. ToLower () สำหรับชื่อแท็บและตอนนี้ฉันสามารถแยกไฟล์ excel ได้อีกครั้ง ขอบคุณ!
vvvv4d

1

ที่อยู่ไฟล์ excel นั้นอาจมีนามสกุลไม่ถูกต้อง คุณสามารถเปลี่ยนนามสกุลจาก xls เป็น xlsx หรือกลับกันแล้วลองอีกครั้ง




0

เพียงเพิ่มวิธีแก้ไขปัญหานี้ ฉันกำลังอัปโหลดไฟล์. xlsx ไปยังเว็บเซิร์ฟเวอร์จากนั้นอ่านจากนั้นแทรกจำนวนมากไปยัง SQL Server ได้รับข้อความแสดงข้อผิดพลาดเดียวกันนี้ลองคำตอบทั้งหมดที่แนะนำ แต่ไม่มีใครทำงาน ในที่สุดฉันบันทึกไฟล์เป็น excel 97-2003 (.xls) ซึ่งใช้งานได้ ... ปัญหาเดียวที่ฉันมีตอนนี้คือไฟล์ต้นฉบับมีแถว 110,000+ แถว


0

หากคุณยังคงมีปัญหานี้จากนั้นตรวจสอบการอนุญาตของคุณฉันลองคำแนะนำเหล่านี้มากมายและปัญหาที่เป็นรูปธรรมของฉันคือไฟล์ที่ฉันต้องการประมวลผลอยู่ภายใต้การควบคุมของแหล่งที่มาและเธรดไม่มีสิทธิ์ฉันต้องเปลี่ยนสิทธิ์โฟลเดอร์ทั้งหมด และมันก็เริ่มทำงาน (ฉันกำลังประมวลผลไฟล์จำนวนมากอยู่ในนั้น) ... มันตรงกับคำแนะนำมากมายเช่นเปลี่ยนชื่อไฟล์หรือตรวจสอบว่าไฟล์ไม่ได้ถูกหลอกด้วยกระบวนการอื่น

ฉันหวังว่ามันจะช่วยคุณ


0

ฉันมีปัญหานี้และการเปลี่ยนคุณสมบัติขยายเป็น HTML นำเข้าแก้ไขตามโพสต์นี้โดย Marcus Miris:

strCon = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & importedFilePathAndName _
         & ";Extended Properties=""HTML Import;HDR=No;IMEX=1"";"

0

แทนที่จะใช้ OleDb คุณสามารถใช้ Excel Interop และเปิดแผ่นงานเป็นแบบอ่านอย่างเดียว

https://msdn.microsoft.com/en-us/library/microsoft.office.interop.excel.workbooks.open(v=office.15).aspx


5
การทำงานร่วมกันของ Excel ไม่ใช่วิธีที่แนะนำให้ใช้กับ Excel อาจทำให้เกิดปัญหามากมายและไม่ควรแนะนำ
MaxOvrdrv

แม้ว่านี่จะเป็นโพสต์เก่า แต่ฉันเห็นด้วยกับ MaxOvrdrv การใช้ interop ไม่ใช่ความคิดที่ดีและควรหลีกเลี่ยงหากไม่มีเหตุผลอื่นนอกจากต้องใช้การติดตั้ง Excel แบบเต็มบนเซิร์ฟเวอร์
Lemiarty

คุณไม่ควรทำสิ่งนี้อย่างแน่นอน
sovemp

0

ACE มี JET ที่แทนที่แล้ว

Ace รองรับ Office รุ่นก่อนหน้าทั้งหมด

รหัสนี้ใช้ได้ดี!

        OleDbConnection MyConnection;
        DataSet DtSet;
        OleDbDataAdapter MyCommand;
        
        MyConnection = new System.Data.OleDb.OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=..\\Book.xlsx;Extended Properties=Excel 12.0;");
        MyCommand = new System.Data.OleDb.OleDbDataAdapter("select * from [Sheet1$]", MyConnection);
        DtSet = new System.Data.DataSet();
        
        MyCommand.Fill(DtSet);
        dataGridView1.DataSource = DtSet.Tables[0];
        MyConnection.Close();

1
มันไม่ใช่. ปัญหายังคงเกิดขึ้นฉันยังไม่ทราบสาเหตุเนื่องจากไฟล์ของฉันมาจาก excel 2007 และบางไฟล์ทำงานได้บางไฟล์ไม่ทำงาน
Henrik

คุณมีแหล่งข้อมูลสำหรับการอ้างสิทธิ์นั้นหรือไม่? ฉันไม่รู้ว่าตัวเองแค่สงสัย :-)
midoriha_senpai

0

สิ่งนี้สามารถเกิดขึ้นได้เมื่อสมุดงานได้รับการป้องกันด้วยรหัสผ่าน มีวิธีแก้ไขบางอย่างเพื่อลบการป้องกันนี้ แต่ตัวอย่างส่วนใหญ่ที่คุณพบว่าออนไลน์นั้นล้าสมัย ไม่ว่าจะด้วยวิธีใดวิธีแก้ง่าย ๆ คือเลิกป้องกันสมุดงานด้วยตนเองมิฉะนั้นให้ใช้บางอย่างเช่น OpenXML เพื่อลบการป้องกันโดยทางโปรแกรม


0

ฉันเพิ่งเห็นข้อผิดพลาดนี้ในบริบทที่ไม่ตรงกับคำตอบที่ระบุไว้ก่อนหน้านี้ มันจะกลายเป็นความขัดแย้งกับAutoVer วิธีแก้ปัญหา: ปิดใช้งาน AutoVer ชั่วคราว


0

ฉันเพิ่งมี "System.Data.OleDb.OleDbException (0x80004005): ตารางภายนอกไม่อยู่ในรูปแบบที่คาดหวัง" เกิดข้อผิดพลาด ฉันพึ่ง Microsoft Access 2010 Runtime ก่อนการอัปเดตที่ติดตั้งโดยอัตโนมัติบนเซิร์ฟเวอร์ของฉันในวันที่ 12 ธันวาคม 2018 รหัส C # ของฉันทำงานได้ดีโดยใช้ผู้ให้บริการ Microsoft.ACE.OLEDB.12.0 หลังจากติดตั้งการอัปเดตตั้งแต่วันที่ 12 ธันวาคม 2018 ฉันเริ่มได้รับ“ ตารางภายนอกไม่ได้อยู่ในรูปแบบที่คาดหวัง” ในไฟล์บันทึกของฉัน

ฉันทิ้ง Microsoft Access 2010 Runtime และติดตั้ง Microsoft Access 2013 Runtime และรหัส C # ของฉันเริ่มทำงานอีกครั้งโดยไม่มี "System.Data.OleDb.OleDbException (0x80004005): ตารางภายนอกไม่อยู่ในรูปแบบที่คาดหวัง" ข้อผิดพลาด

รุ่น 2013 ที่แก้ไขข้อผิดพลาดนี้ให้ฉัน https://www.microsoft.com/en-us/download/confirmation.aspx?id=39358

เวอร์ชัน 2010 ที่ใช้งานได้สำหรับฉันก่อนการอัปเดตที่ติดตั้งบนเซิร์ฟเวอร์ของฉันโดยอัตโนมัติในวันที่ 12 ธันวาคม https://www.microsoft.com/en-us/download/confirmation.aspx?id=10910 https://www.microsoft.com/en-us/download/confirmation.aspx?id=10910

ฉันยังมีข้อผิดพลาดนี้เกิดขึ้นเมื่อเดือนที่แล้วในกระบวนการอัตโนมัติ รหัส C # ทำงานได้ดีเมื่อฉันตรวจแก้จุดบกพร่อง ฉันพบว่าบัญชีบริการที่ใช้รหัสจำเป็นต้องได้รับอนุญาตจากโฟลเดอร์ C: \ Windows \ Temp


0

ขอบเขตของฉันประกอบด้วยการดาวน์โหลดเทมเพลตและตรวจสอบเทมเพลตเมื่อเต็มไปด้วยข้อมูลดังนั้น

1) ดาวน์โหลดไฟล์เทมเพลต (.xlsx) ด้วยแถวส่วนหัว ไฟล์ถูกสร้างขึ้นโดยใช้openxmlและทำงานได้อย่างสมบูรณ์

2) อัปโหลดไฟล์เดียวกันโดยไม่มีการเปลี่ยนแปลงใด ๆ จากสถานะดาวน์โหลด สิ่งนี้จะทำให้เกิดข้อผิดพลาดในการเชื่อมต่อและล้มเหลว (การเชื่อมต่อ OLEDB กำลังใช้สำหรับอ่านแผ่นงาน Excel)

ที่นี่หากกรอกข้อมูลโปรแกรมจะทำงานตามที่คาดไว้

ใครก็ตามที่มีความคิดปัญหาเกี่ยวข้องกับไฟล์ที่เราสร้างขึ้นในรูปแบบxmlถ้าเราเปิดไฟล์และเพียงแค่บันทึกแปลงเป็นรูปแบบ excel และใช้งานได้ดี

มีแนวคิดใดที่จะดาวน์โหลด excel พร้อมกับประเภทไฟล์ที่ต้องการ?


คุณไม่ควรถามคำถามในคำตอบหากคุณต้องการคำตอบสำหรับคำถามของคุณให้ถามแยกต่างหากถ้าจำเป็น
Abhishek Garg

0

การทำงานกับโค้ดที่เก่ากว่าและพบข้อยกเว้นทั่วไปแบบเดียวกันนี้ ยากมากที่จะติดตามปัญหาดังนั้นฉันคิดว่าฉันจะเพิ่มที่นี่ในกรณีที่ช่วยเหลือคนอื่น

ในกรณีของฉันมีรหัสอื่นอยู่ในโครงการที่เปิด StreamReader ในไฟล์ Excel ก่อน OleDbConnection พยายามเปิดไฟล์ (ซึ่งทำได้ในคลาสพื้นฐาน)

ดังนั้นโดยพื้นฐานแล้วฉันแค่ต้องโทรหาClose()วัตถุ StreamReader ก่อนจากนั้นฉันก็สามารถเปิดการเชื่อมต่อ OleDb ได้สำเร็จ มันไม่มีอะไรเกี่ยวข้องกับไฟล์ Excel เองหรือกับสตริง OleDbConnection (ซึ่งเป็นธรรมชาติที่ฉันมองมาก่อน)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.