อ่านไฟล์ Excel จาก C #


233

มีไลบรารีโอเพนซอร์สหรือเปล่าเพื่ออ่านไฟล์ Excel (.xls) โดยตรงจากโปรแกรม C # หรือไม่

ไม่จำเป็นต้องมีความแฟนซีเพียงแค่เลือกแผ่นงานและอ่านข้อมูลเป็นสตริง ถึงตอนนี้ฉันได้ใช้ฟังก์ชั่นข้อความส่งออกเป็น Unicode ของ Excel และแยกไฟล์ (คั่นด้วยแท็บ) ผลลัพธ์ แต่ฉันต้องการที่จะกำจัดขั้นตอนด้วยตนเอง

คำตอบ:


153
var fileName = string.Format("{0}\\fileNameHere", Directory.GetCurrentDirectory());
var connectionString = string.Format("Provider=Microsoft.Jet.OLEDB.4.0; data source={0}; Extended Properties=Excel 8.0;", fileName);

var adapter = new OleDbDataAdapter("SELECT * FROM [workSheetNameHere$]", connectionString);
var ds = new DataSet();

adapter.Fill(ds, "anyNameHere");

DataTable data = ds.Tables["anyNameHere"];

นี่คือสิ่งที่ฉันมักจะใช้ มันแตกต่างกันเล็กน้อยเพราะฉันมักจะติด AsEnumerable () ที่การแก้ไขของตาราง:

var data = ds.Tables["anyNameHere"].AsEnumerable();

เช่นนี้ให้ฉันใช้ LINQ เพื่อค้นหาและสร้าง structs จากเขตข้อมูล

var query = data.Where(x => x.Field<string>("phoneNumber") != string.Empty).Select(x =>
                new MyContact
                    {
                        firstName= x.Field<string>("First Name"),
                        lastName = x.Field<string>("Last Name"),
                        phoneNumber =x.Field<string>("Phone Number"),
                    });

หากดูเหมือนว่า Select ในวิธีนี้จะพยายามเดาชนิดข้อมูลของคอลัมน์และบังคับใช้กับชนิดข้อมูลที่เดาได้ ตัวอย่างเช่นหากคุณมีคอลัมน์ที่มีค่าเป็นสองเท่าส่วนใหญ่จะไม่เหมือนกับคุณผ่าน x.Field <string> แต่คาดว่า x.Field <double> มันเป็นเรื่องจริงเหรอ?
Kevin Le - Khnle

1
เพิ่งค้นหาบน MSDN ดูเหมือนว่า <T> ใช้เพื่อพยายามส่งเนื้อหาในคอลัมน์ไปเป็นประเภท ในตัวอย่างนี้และเพิ่งส่งข้อมูลในคอลัมน์ไปยังสตริง ถ้าคุณต้องการ double คุณจะต้องเรียก double.Parse (x.Field <string> ("Cost") หรืออะไรทำนองนั้น Field เป็นวิธีการขยายสำหรับ DataRow และดูเหมือนไม่มีรุ่นทั่วไป
Robin Robinson

การเพิ่ม double.Parse ให้กับคำสั่ง Linq ทำให้ช้าลงมากหรือไม่
ไม่ระบุตัวตนพิมพ์

23
โปรดทราบว่าหากคุณกำลังอ่านxlsxคุณจะต้องใช้สตริงการเชื่อมต่อนี้แทน:string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0}; Extended Properties=Excel 12.0;", fileName)
Andreas Grech

7
น่าเศร้าไดรเวอร์ Jet.OLEDB ไม่รองรับ 64- บิต คุณจะต้องเปลี่ยนไปใช้เป้าหมาย x86 แทนซีพียูใด ๆ (หากคุณยังต้องการใช้วิธีนี้ต่อไป) อีกวิธีหนึ่งคือการติดตั้งไดรเวอร์ ACE 64 บิตและเปลี่ยนสตริง conn ใช้ driver นี้ (ตามที่ระบุโดยอันเดรีย) - microsoft.com/en-us/download/...
ดันแคน

83

หากเป็นเพียงข้อมูลอย่างง่ายที่มีอยู่ในไฟล์ Excel คุณสามารถอ่านข้อมูลผ่าน ADO.NET ดูสตริงการเชื่อมต่อที่ระบุไว้ที่นี่:

http://www.connectionstrings.com/?carrier=excel2007 หรือ http://www.connectionstrings.com/?carrier=excel

-Ryan

อัปเดต: จากนั้นคุณสามารถอ่านแผ่นงานผ่านทางที่ชอบ select * from [Sheet1$]


1
วิธีนี้เร็วที่สุด
StingyJack

17
แน่นอนว่ามันไม่จริง Stingy คุณต้องร่อนข้อมูลทั้งหมดและเขียนรหัส DB เส็งเคร็ง (งานฝีมือแบบจำลองของคุณคอลัมน์แผนที่เพื่อคุณสมบัติ yadda yadda) วิธีที่เร็วที่สุดคือการปล่อยให้บาง SOB ยากจนอื่น ๆ ที่ทำเพื่อคุณ นั่นเป็นเหตุผลที่ผู้คนใช้เฟรมเวิร์กแทนที่จะเขียนทุกอย่างจากล่างขึ้นบน

12
วิธีการไร้ค่า! ตัดคอลัมน์ข้อความเป็น 255 อักขระเมื่ออ่าน ระวัง! โปรดดู: stackoverflow.com/questions/1519288/… เครื่องมือ ACE ทำสิ่งเดียวกัน!
Triynko

5
โปรดทราบว่าการใช้ ADO.NET เพื่ออ่านข้อมูลจาก exel นั้นต้องมีการติดตั้ง Microsoft Access หรือ Microsoft Access Database Engine ที่แจกจ่ายต่อได้
zihotki

3
คนขับจะเดาชนิดของคอลัมน์ตามแถวแรก ๆ หากคุณมีคอลัมน์ที่มีลักษณะเหมือนจำนวนเต็มในแถวแรกคุณจะพบข้อผิดพลาดเมื่อคุณกดจำนวนที่ไม่ใช่จำนวนเต็ม (เช่นทศนิยม, สตริง)
Brian Low

27

วิธีการ ADO.NET นั้นง่ายและรวดเร็ว แต่มีข้อผิดพลาดเล็กน้อยที่คุณควรระวังโดยเฉพาะอย่างยิ่งเกี่ยวกับวิธีการจัดการ DataTypes

บทความที่ยอดเยี่ยมนี้จะช่วยคุณหลีกเลี่ยงข้อผิดพลาดทั่วไป: http://blog.lab49.com/archives/196


คุณตอบคำถามของฉัน (ในรูปแบบของความคิดเห็นด้านบน)
Kevin Le - Khnle

22

นี่คือสิ่งที่ฉันใช้สำหรับ Excel 2003:

Dictionary<string, string> props = new Dictionary<string, string>();
props["Provider"] = "Microsoft.Jet.OLEDB.4.0";
props["Data Source"] = repFile;
props["Extended Properties"] = "Excel 8.0";

StringBuilder sb = new StringBuilder();
foreach (KeyValuePair<string, string> prop in props)
{
    sb.Append(prop.Key);
    sb.Append('=');
    sb.Append(prop.Value);
    sb.Append(';');
}
string properties = sb.ToString();

using (OleDbConnection conn = new OleDbConnection(properties))
{
    conn.Open();
    DataSet ds = new DataSet();
    string columns = String.Join(",", columnNames.ToArray());
    using (OleDbDataAdapter da = new OleDbDataAdapter(
        "SELECT " + columns + " FROM [" + worksheet + "$]", conn))
    {
        DataTable dt = new DataTable(tableName);
        da.Fill(dt);
        ds.Tables.Add(dt);
    }
}

2
ไม่ได้กำหนดเวิร์กชีท ... ดูเหมือนจะแปลกสำหรับฉันหลังจากกำหนดทุกอย่างชัดเจน
Jeremy Holovacs

21

Excel Data Reader เป็นอย่างไร

http://exceldatareader.codeplex.com/

ฉันใช้ความโกรธในสภาพแวดล้อมการผลิตเพื่อดึงข้อมูลจำนวนมากจากไฟล์ Excel ที่หลากหลายลงใน SQL Server Compact มันใช้งานได้ดีมากและค่อนข้างแข็งแกร่ง


2
ฉันจะที่สอง Excel Data Reader; มันยังนำไปสู่การทดสอบ Excel Data Driven Tests ที่มีประโยชน์อย่างไม่น่าเชื่อซึ่งใช้แอททริบิวต์ TestCaseSource ของ NUnit 2.5 เพื่อทำการทดสอบด้วยข้อมูลโดยใช้สเปรดชีต Excel ที่ใช้งานง่าย เพียงระวังว่า Resharper ยังไม่สนับสนุน TestCaseSource ดังนั้นคุณต้องใช้นักวิ่ง NUnit
David Keaveny

ขออภัยมีปัญหาบางอย่างกับห้องสมุดนี้ที่เราเพิ่งพบ ก่อนอื่นเรามีฟิลด์สกุลเงินบางส่วนที่ออกมาเป็นวันที่ ประการที่สองมันพังเมื่อสมุดงานมีแผ่นงานเปล่าอยู่ในนั้น ดังนั้นแม้ว่ามันจะง่ายมากในการรวมเรากำลังประเมินอีกครั้งว่าจะใช้ห้องสมุดนี้ต่อไปหรือไม่ ดูเหมือนจะไม่ได้รับการพัฒนาอย่างแข็งขัน
Ian1971

นอกจากนี้ยังอนุมานว่ามีองค์ประกอบเสริมบางตัวในไฟล์ xlsx ที่ทำให้ไม่สามารถอ่านข้อมูลได้หากขาด
RichieHindle

เราประสบปัญหากับไฟล์ Excel ที่มาจากบริการรายงานของ SQL Server พวกเขาไม่ทำงานเว้นแต่คุณจะเปิดและบันทึกไว้ (แม้ไม่มีการแก้ไข) @ RichieHindle: คุณกำลังพูดถึงองค์ประกอบตัวเลือกอะไร (หวังว่านี่จะช่วยฉันด้วยไฟล์ SSRS Excel ของฉัน)
ปีเตอร์

@ Peter: ฉันคิดว่ามันเป็น<dimension>องค์ประกอบที่ขาดหายไปในสิ่ง<worksheet>ที่ทำให้เกิดปัญหากับฉัน
RichieHindle

16

นี่คือรหัสที่ฉันเขียนใน C # โดยใช้. NET 1.1 ไม่กี่ปีที่ผ่านมา ไม่แน่ใจว่านี่จะเป็นสิ่งที่คุณต้องการ (และอาจไม่ใช่รหัสที่ดีที่สุดของฉัน :))

using System;
using System.Data;
using System.Data.OleDb;

namespace ExportExcelToAccess
{
    /// <summary>
    /// Summary description for ExcelHelper.
    /// </summary>
    public sealed class ExcelHelper
    {
        private const string CONNECTION_STRING = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=<FILENAME>;Extended Properties=\"Excel 8.0;HDR=Yes;\";";

        public static DataTable GetDataTableFromExcelFile(string fullFileName, ref string sheetName)
        {
            OleDbConnection objConnection = new OleDbConnection();
            objConnection = new OleDbConnection(CONNECTION_STRING.Replace("<FILENAME>", fullFileName));
            DataSet dsImport = new DataSet();

            try
            {
                objConnection.Open();

                DataTable dtSchema = objConnection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);

                if( (null == dtSchema) || ( dtSchema.Rows.Count <= 0 ) )
                {
                    //raise exception if needed
                }

                if( (null != sheetName) && (0 != sheetName.Length))
                {
                    if( !CheckIfSheetNameExists(sheetName, dtSchema) )
                    {
                        //raise exception if needed
                    }
                }
                else
                {
                    //Reading the first sheet name from the Excel file.
                    sheetName = dtSchema.Rows[0]["TABLE_NAME"].ToString();
                }

                new OleDbDataAdapter("SELECT * FROM [" + sheetName + "]", objConnection ).Fill(dsImport);
            }
            catch (Exception)
            {
                //raise exception if needed
            }
            finally
            {
                // Clean up.
                if(objConnection != null)
                {
                    objConnection.Close();
                    objConnection.Dispose();
                }
            }


            return dsImport.Tables[0];
            #region Commented code for importing data from CSV file.
            //              string strConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" +"Data Source=" + System.IO.Path.GetDirectoryName(fullFileName) +";" +"Extended Properties=\"Text;HDR=YES;FMT=Delimited\"";
            //
            //              System.Data.OleDb.OleDbConnection conText = new System.Data.OleDb.OleDbConnection(strConnectionString);
            //              new System.Data.OleDb.OleDbDataAdapter("SELECT * FROM " + System.IO.Path.GetFileName(fullFileName).Replace(".", "#"), conText).Fill(dsImport);
            //              return dsImport.Tables[0];

            #endregion
        }

        /// <summary>
        /// This method checks if the user entered sheetName exists in the Schema Table
        /// </summary>
        /// <param name="sheetName">Sheet name to be verified</param>
        /// <param name="dtSchema">schema table </param>
        private static bool CheckIfSheetNameExists(string sheetName, DataTable dtSchema)
        {
            foreach(DataRow dataRow in dtSchema.Rows)
            {
                if( sheetName == dataRow["TABLE_NAME"].ToString() )
                {
                    return true;
                }   
            }
            return false;
        }
    }
}

ไม่สามารถเห็นด้วยกับ Cherian มากขึ้น รหัสนี้เป็นเวลาหลายปีเก่า ... ก่อนที่ฉันจะเป็นความเชี่ยวชาญกับ Resharper :)
HITEC

2
รหัสน่าเกลียด แต่มันแสดงวิธีรับชื่อชีตดีมาก!
Sam

15

Koograเป็นส่วนประกอบโอเพนซอร์ซที่เขียนใน C # ที่อ่านและเขียนไฟล์ Excel


ไม่ได้ดูมีความกระฉับกระเฉงมากกว่านี้เมื่อเปรียบเทียบกับ NPOI
David Burton เมื่อ


8

ฉันอ่านจากไฟล์ Excel เป็นจำนวนมากใน C # a เมื่อนานมาแล้วและเราใช้สองวิธี:

  • COM API ซึ่งคุณสามารถเข้าถึงวัตถุของ Excel ได้โดยตรงและจัดการผ่านวิธีการและคุณสมบัติ
  • ไดรเวอร์ ODBC ที่อนุญาตให้ใช้ Excel เช่นฐานข้อมูล

วิธีการหลังนั้นเร็วกว่ามาก : การอ่านตารางขนาดใหญ่ที่มี 20 คอลัมน์และ 200 บรรทัดจะใช้เวลา 30 วินาทีผ่านทาง COM และครึ่งวินาทีผ่าน ODBC ดังนั้นฉันจะแนะนำวิธีการฐานข้อมูลหากสิ่งที่คุณต้องการคือข้อมูล

ไชโย

คาร์ล



6

ฉันต้องการแสดงวิธีการง่าย ๆ ในการอ่านไฟล์ xls / xlsx ด้วย. NET ฉันหวังว่าสิ่งต่อไปนี้จะเป็นประโยชน์สำหรับคุณ

 ส่วนตัว DataTable ReadExcelToTable (เส้นทางสตริง)    
 {

     // สตริงการเชื่อมต่อ

     string connstring = "Provider = Microsoft.ACE.OLEDB.12.0; Data Source =" + path + "; Extended Properties = 'Excel 8.0; HDR = NO; IMEX = 1';";  
     // ชื่อเดียวกัน 
     // string connstring = Provider = Microsoft.JET.OLEDB.4.0; Data Source = "+ path + //"; Extended Properties = 'Excel 8.0; HDR = NO; IMEX = 1'; "; 

     ใช้ (OleDbConnection conn = ใหม่ OleDbConnection (เชื่อมต่อ))
     {
        conn.Open ();
        // รับชื่อชีตทั้งหมด
        DataTable sheetsName = conn.GetOleDbSchemaTable (OleDbSchemaGuid.Tables วัตถุใหม่ [] {null, null, null, "Table"});  

        // รับชื่อชีตแรก
        string firstSheetName = sheetsName.Rows [0] [2] .ToString (); 

        // สตริงการสืบค้น 
        string sql = string.Format ("SELECT * FROM [{0}]", firstSheetName); 
        OleDbDataAdapter ada = new OleDbDataAdapter (sql, connstring);
        ชุดข้อมูลชุด = ชุดข้อมูลใหม่ ();
        ada.Fill (ชุด);
        คืนชุดตาราง [0];   
   }
 }

รหัสคือบทความจาก: http://www.c-sharpcorner.com/uploadfile/d2dcfc/read-excel-file-with-net/ คุณสามารถรับรายละเอียดเพิ่มเติมได้


2
มันมีประโยชน์โดยเฉพาะอย่างยิ่งส่วนที่เกี่ยวกับการอ่านชื่อชีต
martinstoeckli

4

ไม่ฟรี แต่ด้วย Office ล่าสุดมีการทำงานอัตโนมัติที่ยอดเยี่ยมมาก . Net API (มี API มาเป็นเวลานาน แต่ก็น่ารังเกียจ COM) คุณสามารถทำทุกสิ่งที่คุณต้องการ / ต้องการเป็นรหัสทั้งหมดในขณะที่แอป Office ยังคงเป็นกระบวนการพื้นหลังที่ซ่อนอยู่


3
@ ผู้ไม่ประสงค์ออกประเภทฉันได้อ่านคำถามและเสนอทางเลือกที่เป็นประโยชน์ในการใช้งาน OSS ที่ต้องการ ... เพราะฉันค่อนข้างมั่นใจว่าไม่มีอะไรที่ใช้ได้ และการตัดสินโดยคำตอบที่ได้รับการยอมรับข้อกำหนดของการติดตั้ง Office ไม่ใช่ปัญหา
xanadont

3

ยกโทษให้ฉันถ้าฉันไม่ได้อยู่ที่นี่ แต่นี่ไม่ใช่สิ่งที่Office PIAใช้เพื่ออะไร


5
ใช่ แต่นั่นจะเกี่ยวข้องกับการสร้างอินสแตนซ์ของ Excel แอปพลิเคชันโหลดไฟล์ xls ฯลฯ หากข้อกำหนดนั้นเป็นการอ่านข้อมูลบางอย่างจากไฟล์เพียงอย่างเดียวมันจะง่ายกว่าและเบากว่ามากในการใช้หนึ่งในวิธี ADO.NET ที่อธิบายไว้ ในคำตอบอื่น ๆ
Adam Ralph

ช้าเกินไปการใช้ Office PIA เป็นพื้นฐานทุกอย่างอื่นเร็วกว่า - เพียงแค่ใช้อาร์เรย์วัตถุที่ส่งผ่านจากคุณสมบัติ. Value2 ซึ่งยังคงใช้ PIA อยู่
ไม่ระบุตัวตนพิมพ์

3

เมื่อเร็ว ๆ นี้อีกส่วนหนึ่งเพื่อให้ดีขึ้นที่ LINQ .... ฉันใช้ Excel อัตโนมัติของ API เพื่อบันทึกไฟล์เป็น XML Spreadsheet จากนั้นรับไฟล์ที่ใช้ LINQ เป็น XML


ฉันสงสัยว่าคุณสามารถปกป้องมันจาก Excel แต่ไม่ใช่จากคนที่มีคอมไพเลอร์ ... เหมือนอะไรก็ได้ ... มันแค่ไบต์
เคนนี

@gsvirdi โพสต์คำถามแยกต่างหากเกี่ยวกับความปลอดภัยของไฟล์ Excel คำถามนี้เกี่ยวกับประสิทธิภาพ
ไม่ระบุตัวตนพิมพ์

3

SpreadsheetGear สำหรับ. NETเป็นส่วนประกอบสเปรดชีตที่เข้ากันได้กับ Excel สำหรับ. NET คุณสามารถมองเห็นสิ่งที่ลูกค้าของเราพูดเกี่ยวกับประสิทธิภาพการทำงานบนด้านขวามือของเราที่หน้าผลิตภัณฑ์ คุณสามารถลองด้วยตัวคุณเองด้วยการประเมินผลที่สมบูรณ์และใช้งานได้ฟรี


3

SmartXLSเป็นอีกหนึ่งองค์ประกอบสเปรดชีต excel ที่สนับสนุนคุณสมบัติส่วนใหญ่ของ Excel Charts, เอ็นจิ้นสูตรและสามารถอ่าน / เขียนรูปแบบ excel2007 openxml



2

ฉันขอแนะนำ FileHelpers Library ซึ่งเป็นไลบรารี. NET ที่ฟรีและใช้งานง่ายเพื่อนำเข้า / ส่งออกข้อมูลจาก EXCEL, ความยาวคงที่หรือบันทึกที่คั่นด้วยในไฟล์สตริงหรือสตรีม + เพิ่มเติม

ส่วนเอกสารข้อมูลลิงค์ข้อมูล Excel http://filehelpers.sourceforge.net/example_exceldatalink.html


1
ฉันจะไม่ทำให้คุณผิดหวัง แต่เมื่อไม่นานมานี้ฉันเริ่มใช้ FileHelpers และรู้สึกตกใจเมื่อเห็นว่า ... เส็งเคร็ง ยกตัวอย่างเช่นวิธีเดียวที่จะ map คอลัมน์ใน CSV เพื่อคุณสมบัติ ... ขอโทษนะเขตของรูปแบบคือการสร้างเขตข้อมูลในการสั่งซื้อของคอลัมน์ ฉันไม่รู้เกี่ยวกับคุณ แต่ฉันจะไม่พึ่งพาการรวบรวมของคอมไพเลอร์สำหรับหนึ่งในข้อควรพิจารณาในการออกแบบที่สำคัญที่สุดของเฟรมเวิร์ก f8king ของฉัน


2

SpreadsheetGear ยอดเยี่ยม ใช่มันเป็นค่าใช้จ่าย แต่เมื่อเทียบกับการทำซ้ำกับโซลูชันอื่น ๆ เหล่านี้มันคุ้มค่ากับราคา มันรวดเร็วเชื่อถือได้ครอบคลุมมากและฉันต้องบอกว่าหลังจากใช้ผลิตภัณฑ์นี้ในงานซอฟต์แวร์แบบเต็มเวลามานานกว่าหนึ่งปีครึ่งฝ่ายบริการลูกค้าของพวกเขายอดเยี่ยมมาก!


ยากที่จะพิสูจน์ว่ามีวิธีที่ง่ายและมีประสิทธิภาพ (ฟรี) ในการอ่านและเขียนไปยัง Excel
ไม่ระบุตัวตนพิมพ์

2

โซลูชันที่เราใช้จำเป็นต้อง:

  • อนุญาตให้อ่าน / เขียนไฟล์ที่สร้างจาก Excel
  • มีประสิทธิภาพรวดเร็ว (ไม่เหมือนกับการใช้ COM)
  • เป็น MS Office อิสระ (จำเป็นต้องใช้งานโดยที่ลูกค้าไม่ได้ติดตั้ง MS Office)
  • เป็นอิสระหรือโอเพนซอร์ส (แต่พัฒนาอย่างแข็งขัน)

มีหลายทางเลือก แต่เราพบNPoi (. NET พอร์ตของโครงการPoiโอเพ่นซอร์สที่มีอยู่มายาวนานของ Java ) จะดีที่สุด: http://npoi.codeplex.com/

นอกจากนี้ยังช่วยให้ทำงานกับไฟล์. doc และ. ppt ได้


2

หากเป็นเพียงข้อมูลแบบตาราง ฉันจะแนะนำผู้ช่วยเหลือแฟ้มข้อมูลมาร์กอส Melli ซึ่งสามารถดาวน์โหลดได้ที่นี่



1

คุณสามารถเขียนสเปรดชีต Excel ที่โหลดสเปรดชีต Excel ที่กำหนดและบันทึกเป็น csv (แทนที่จะทำด้วยตนเอง)

จากนั้นคุณสามารถทำให้อัตโนมัติจาก c #

และเมื่ออยู่ใน csv โปรแกรม c # สามารถคร่ำครวญได้

(เช่นถ้ามีคนขอให้คุณเขียนโปรแกรมใน excel จะเป็นการดีที่สุดที่จะแกล้งคุณไม่รู้วิธี)

(แก้ไข: ใช่แล้วปล้นและไรอันทั้งคู่ถูกต้อง)


1

ฉันรู้ว่าผู้คนสร้าง "ส่วนขยาย" ของ Excel เพื่อจุดประสงค์นี้
คุณสร้างปุ่มมากขึ้นหรือน้อยลงใน Excel ที่ระบุว่า "ส่งออกไปยังโปรแกรม X" จากนั้นส่งออกและส่งออกข้อมูลในรูปแบบที่โปรแกรมสามารถอ่านได้

http://msdn.microsoft.com/en-us/library/ms186213.aspxควรเป็นจุดเริ่มต้นที่ดี

โชคดี


1

เพิ่งทำโครงการตัวอย่างด่วนที่ต้องการการจัดการไฟล์ excel องค์ประกอบ. NET จากซอฟต์แวร์ GemBox นั้นเพียงพอสำหรับความต้องการของฉัน มันมีรุ่นฟรีที่มีข้อ จำกัด เล็กน้อย

http://www.gemboxsoftware.com/GBSpreadsheet.htm


FYI: ฉันลองแล้ว แต่ก็ไม่เป็นไปตามที่ฉันต้องการเพื่ออ่านไฟล์ที่เข้ารหัส
ชาด

1

Excel Packageเป็นองค์ประกอบโอเพ่นซอร์ส (GPL) สำหรับการอ่าน / เขียนไฟล์ Excel 2007 ฉันใช้มันในโครงการขนาดเล็กและ API นั้นตรงไปตรงมา ใช้งานได้กับ XLSX เท่านั้น (Excel 200 &) ไม่ใช่กับ XLS

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

ตอนแรกฉันลองใช้วิธี ADO.Net (สตริงการเชื่อมต่อของ Excel) แต่มันเต็มไปด้วยแฮ็กที่น่ารังเกียจ - ตัวอย่างเช่นหากแถวที่สองมีตัวเลขมันจะส่งกลับ ints สำหรับฟิลด์ทั้งหมดในคอลัมน์ด้านล่างและวางข้อมูลอย่างเงียบ ๆ ที่ไม่พอดี


1

เราใช้ClosedXMLในระบบที่ค่อนข้างใหญ่

  • ฟรี
  • ติดตั้งง่าย
  • ส่งต่อการเข้ารหัสตรงไปข้างหน้า
  • มากการสนับสนุนที่ตอบสนองได้ดี
  • ทีมงานผู้พัฒนาคือextremlyเปิดให้คำแนะนำใหม่ บ่อยครั้งที่คุณสมบัติใหม่และการแก้ไขข้อผิดพลาดถูกนำไปใช้ภายในสัปดาห์เดียวกัน

1

Take.ioสเปรดชีตจะทำงานให้คุณโดยไม่มีค่าใช้จ่าย เพียงแค่ใช้เวลาดูที่นี้


นี่เป็นห้องสมุดเล็ก ๆ ที่ยอดเยี่ยมจริงๆ มันแปลงทุกอย่างให้เป็นรายการของรายการสตริงซึ่งใช้ได้กับงานที่ฉันต้องการ
Drewmate

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