>

NT 서버 운영 체제에서 Excel 파일의 내용을 읽는 적절한 방법을 찾으려고합니다. Excel API를 사용하는 데 많은 문제가 있으며 공식 Office 자동화의 Microsoft Excel API가 Excel 자동화에 적합하지 않음을 나타냅니다. 내가 본 정렬 문제는 기사에서 설명한 것과 유사합니다.

서버에서 Excel 파일 (xls, xlsx, xlsm)을 읽을 수있는 또 다른 방법이 있습니까 (UI가 아님) 서버에 동일한 종류의 스레딩/보안/라이센스 문제가 발생하지 않습니다. 엑셀 API?

  • 답변 # 1

    필요한 기능을 허용하는 여러 사용자가 강조한 라이브러리가 많이있었습니다. 나는 여기에 그것들을 나열했고 이것들 중 일부는 적절한 경우에 그것들을 비교하기 위해 흥미로운 의견을 적어 보았습니다. 내가 포함시킨 세부 사항은 완전히 의견에 근거한 것이지만, 이러한 라이브러리 중 하나는 아마도 필요한 목표를 달성 할 것입니다.

    스프레드 시트 기어 넷
    (구매 비용이 높아 평가하지 않았 음)

    Aspose.Cells
    (동료에 의해 평가되었습니다. 구현이 매우 간단하고 Excel Interop과 비슷한 성능으로 보입니다)

    GemBox
    (평가하지 않았습니다)

    엑셀 서비스
    (SharePoint 2007에만 포함 된 것 같습니다)

    엑셀 매퍼  (내 요구 사항에 맞지 않는 강력한 형식의 개체를 가져와야하므로 평가하지 않았습니다.)

    SmartXls
    (내 요구 사항에 맞지 않는 강력한 형식의 개체를 가져와야하므로 평가하지 않았습니다.)

    ActiveXls
    (사용하기 쉽고, 속성이 없기 때문에 질문이 제기되고, 사소한 작업을위한 방법을 선호합니다. 1M 레코드에 대한 청구에도 불구하고 저렴한 FlexCel이 1 초 동안 기록했습니다. 도움말/API 설명서는 거의 쓸모가 없다고 결정했습니다.)

    쿠 그라
    (문서/정보가 없어 평가하지 않았습니다)

    파일 도우미
    (평가하지 않았습니다)

    Flexcel
    (최고의 비용 솔루션이 발견되었으며 성능이 우수하며 Excel Interop 구조에 근접하여 구현하기가 간단했습니다. 또한 기술 지원팀으로부터 기술적 인 질문에 대한 빠른 응답을 받았습니다. 아마도 무리를 골 랐을 것입니다.)

    SyncFusion BackOffice
    (중간 비용과 합리적인 구조. 불행히도 단위 테스트를 실행할 때 구현하기가 더 어려웠고 결과가 일관성이 없었습니다. 또한 수많은 '보호 된 메모리를 읽으려고했습니다'오류가 발생하여 순수하게 관리되는 라이브러리를 사용하지 않는 것이 좋습니다. '

  • 답변 # 2

    나는 전에 xls에서 데이터를 가져 오는 ADO.NET을 사용했습니다. 이것이 지원할 모든 Excel Doc 유형을 잘 모르지만 ADO.NET을 사용하여 Excel 스프레드 시트 읽기 및 쓰기 C # DbProviderFactory

    다음은 SO 질문의 일부 코드입니다.

    Office 나 타사 도구를 설치하지 않고도 Excel로 읽고 쓸 수있었습니다.

  • 답변 # 3

    Excel을 설치하지 않고 C #으로 Excel 파일을 읽으려면 Apache의 POI를 사용할 수 있습니다.

    MS Office 형식을 읽고 쓰는 Java 라이브러리입니다. 자바이고 C #을 사용하기 때문에 POI 프로젝트의 IKVM과 자바 클래스가 필요합니다.

    그러나 가장 쉬운 방법은 Jon Iles의 뛰어난 MPXJ 프로젝트를 다운로드하는 것입니다. IKVM.OpendJDK.ClassLibrary.dll 에 대한 참조를 설정하십시오. IKVM.Runtime.dll poi-3.2-FINAL-20081019.dll

    빠른 콘솔 앱을 해킹하여 Excel .xls 시트를 읽는 간단한 방법을 보여주었습니다. 첫 번째 시트 만 읽고 행 또는 셀 반복자를 사용하지 않지만 제대로 작동합니다.

    NB : org.apache.poi.ss 를 봐야합니다   .xlsx 를 읽을 수 있도록  등의 파일.

    //C# code for using the Apache POI libraries
    using System;
    using System.Collections.Generic;
    using System.Text;
    
    // poi for xls
    using org.apache.poi;
    using org.apache.poi.poifs;
    using org.apache.poi.poifs.filesystem;
    using org.apache.poi.hssf;
    using org.apache.poi.hssf.usermodel;
    using org.apache.poi.ss;
    namespace ConsoleApplication1
    {
        class Test
        {
            static void Main(string[] args)
            {
                if (args.Length != 1)
                {
                    Console.Out.WriteLine("Usage: XLSReadTest <xls file>");
                }
                else
                {
                    XLSRead x = new XLSRead();
                    x.Process(args[0]);
                    //x.Process("c:\\temp\\testfile.xls");
                }
    
    
            }
        }
    
        class XLSRead
        {
            public void Process(string inputFile)
            {
    
                int r = 0;
    
                Console.Out.WriteLine("Reading input file started.");
                DateTime start = DateTime.Now;
                java.io.InputStream inputStream = new java.io.FileInputStream(inputFile);
                POIFSFileSystem fs = new POIFSFileSystem(inputStream);
                HSSFWorkbook wb = new HSSFWorkbook(fs);
                HSSFSheet sh = wb.getSheetAt(0);
    
                r = sh.getFirstRowNum();
                while (r <= sh.getLastRowNum())
                {
                    HSSFRow row = sh.getRow(r);
                    int c = row.getFirstCellNum();
                    string val = "";
                    while (c < row.getLastCellNum())
                    {
                        HSSFCell cell = row.getCell(c);
                        switch(cell.getCellType())
                        {
                          case HSSFCell.CELL_TYPE_NUMERIC:
                              val = cell.getNumericCellValue().ToString();
                              break;
                          case HSSFCell.CELL_TYPE_STRING:
                              val = cell.getStringCellValue();
                              break;
                        }
                        Console.Out.WriteLine("Row: " + r + ", Cell: " + c + " = " + val);
                        c++;
                    }
                    r++;
                }
                long elapsed = DateTime.Now.Ticks - start.Ticks;
                String seconds = String.Format("{0:n}", elapsed / 1000000);
                Console.Out.WriteLine("\r\n\r\nReading input file completed in " + seconds + "s." + "\r\n");
    
            }
        }
    }
    
    

  • 답변 # 4

    SO 광고가 귀하의 질문과 관련이없는 이유를 잘 모르겠습니다.

    Microsoft의 Excel Services와 비슷한 것이 있습니다. 웹 서비스 스타일로 Excel을 사용할 수 있다고 생각합니다. SpreadSheetGear는 Microsoft가 광고를 표시하는 데 사용한 것으로 생각합니다. :)

  • 답변 # 5

    엑셀.

    사람들이 서버에서 Excel을 사용하는 것을 막으려 고 노력한 후, 그들은 시장의 요구를 포기하고 받아들이고 이것을 지원하기 시작했습니다.

    2007에는 이것에 대한 약간의 발전이 있으며 Excel 2010에는 더 많은 기능이 있어야합니다.

관련 자료

  • 이전 외부 Javascript에서 Python Flask로 매개 변수 전달
  • 다음 Android 웹보기에서 iframe을 통해 YouTube 비디오로드