2009-02-14 57 views
5

我有一個MS-Access應用程序,用於格式化兩個大型電子表格(20,000+行)中的數據,將此數據導入到表格中,運行幾個比較數據的查詢並輸出結果爲excel文件。用於電子表格處理的MS-Access/Excel的替代方案

問題是,隨着應用程序(和VBA代碼)的增長,使用Access變得更加痛苦,我想知道是否有更好的方法?

與MS-Access相比,.NET(C#)解決方案的優點/缺點是什麼?與MS-Access相比,什麼是最好的庫等?

乾杯,

Breandán

乾杯的反應,到目前爲止,我忘了提,雖然這個應用程序需要獨立,我需要能夠打包應用程序,並和發送讓最終用戶在他們的電腦上安裝。這隻有(注意)安裝了MS-Office和.Net Framework,所以我不確定MySQL等沒有託管它的可行性。

+0

您使用Access遇到的困難是什麼?它是執行速度嗎?它是否將數據導入到Access中,操作它並輸出Excel文件? – 2009-02-14 23:13:06

+0

它主要是糟糕的VBA IDE,差異性處理,日誌選項和代碼更改跟蹤。與我之前使用過的版本(java/eclipse,c#/ VS)相比,感覺就像退後一步。目前,該應用程序是穩定的,但可能在未來幾個月內得到擴展,所以我現在想要改變。 – 2009-02-15 20:43:53

回答

5

移動到.Net將允許你有更好的工具來處理數據。

你必須小心,雖然你現在正在使用你的Access解決方案正在做什麼:如果你正在做大量的特殊情況處理來處理Excel和Excel中的數據,那麼你很可能會仍然必須以您選擇的任何語言或框架來完成這些工作。

如果您有大量代碼將Excel數據導入Access,那麼您仍然可以保留該部分的Access並使用.Net來幫助您進行比較和創建生成的Excel報表。

如果不知道更多關於項目的信息,真的有點難。

如果你只是想使用自動化來拉數據並創建您的Excel文件,然後淨可能無法爲您提供了很多,你仍然必須做你已經在做訪問的確切同樣的事情。

相反,你可以考慮使用使用不同的模式打開/以更好的方式創建Excel電子表格Excel的商業成分。
有幾個組件供應商擁有這些。

一種解決方案是使用也報告工具直接從Excel中提取數據,並生成一個報告,你可以簡單地保存返回到Excel。

我的建議是:

  • 如果你的Access解決方案是穩定的,它做自己的工作,那麼你可以考慮保持它。
    搬到新系統將花費你的時間和金錢,你必須檢查結果是否值得投資。
  • 如果您覺得受到Access功能的限制,那麼花一些時間試驗各種允許您操作Excel的解決方案和組件,例如使用LINQ Excel提供程序(12)可能會提供很好的抽象,或嘗試各種commercial components,直到找到符合您需求的東西。

如果你打算使用.Net路由,你甚至可能不需要數據庫來處理數據。
如果你這麼做,你可以隨時使用Jet或其新版本ACE作爲創建MSAccess數據庫的後端。
它已經安裝在大多數機器上,並且由MS工具支持。
其他不錯的選擇是SQL Server Compact和SQLite,因爲這些都不需要複雜的設置,只需要一個與您的項目一起發佈的DLL。

1

Apache POI庫可能對您有用。它基於java,可以在excel文件上工作。

另一種選擇可能是使用直接ODBC驅動程序來處理XLS文件。可能有很多的,雖然記錄..

http://poi.apache.org/

的POI項目包括API,用於操縱基於微軟的OLE 2複合文檔格式的各種文件格式和Office OpenXML格式,使用純Java。簡而言之,您可以使用Java讀取和寫入MS Excel文件。另外,您可以使用Java讀寫MS Word和MS PowerPoint文件。 POI是您的Java Excel解決方案(適用於Excel 97-2007)。但是,我們有一個完整的API來移植其他OLE 2複合文檔格式,並歡迎其他人蔘與。

OLE 2基於複合文檔格式的文件包括大多數Microsoft Office文件,如XLS和DOC以及基於MFC序列化API的文件格式。

基於Office OpenXML格式的文件包括新的(2007+)基於xml的文件格式,包括Microsoft Office文件(如XLSX,DOCX和PPTX)。

編輯:檢查出像Monarch Pro一個工具,它是在數據挖掘卓越等

-2

我不知道,如果你已經超越訪問。這就是更強大的數據庫,比如SQL Server。 20000行對於SQL Server來說並不是很大,但我敢打賭,它已經到達了Access。訪問佔用多少磁盤空間時運行它?數據增長的速度有多快?

你怎麼知道C#與VB?如果你不熟悉C#,那可能是一個很好的學習機會。這是一個你已經很清楚的問題。

+0

不能讓人閱讀?原來的問題說這是笨拙的代碼。 20K行是Jet處理的完全微不足道的數據量。 – 2009-02-14 22:57:59

+0

旁邊,20000行是沒有訪問。 您可以輕鬆查詢100k行。 如果總是讓我感到困惑,那麼人們對Access的真正侷限性與想象中的侷限性的理解是多麼的少。 – 2009-02-15 13:30:30

0

我會考慮一個使用SQL Server Compact開始的系統。 如果你願意,你可以在沒有安裝的情況下使用它(儘管我建議你這麼做,假設必需的dll在GAC中更容易)。如果後來你發現你需要更多的功能(比如說存儲過程或者TEXT/BLOB列等),那麼遷移到SQL Server將是微不足道的。

如果你的數據庫是再生每次然後嘗試不同的東西出來是一個簡單的指向不同的文件。

如果你有相當的代碼在VBA我建議首先將其移至VB.Net(使這一點,首先和最容易出錯的過渡更容易),那麼該遷移到C#如果這是你的願望。

至於生成/更改Excel工作表,您有三個選項。

一種是使用VSTO雖然Wikipedia是一個更好的描述。儘管它具有完全不同的複雜性,但它將最接近於您的舊VBA開發。

另一種方法是使用Excel輸出的圖書館之一,有few加上許多商業的。我不能推薦任何個人,但other's here have

最後是剛剛傾倒出來的CSV,並讓Excel處理它,當你打開它。

2

我想說的20000行的數據量你使用,SQL Server數據庫是不是真的要多爭取你除了移動數據操作的存儲過程的工作。在這方面,它可以說比VBA更好,所以你可能會得到更易於維護的代碼庫。但是,數據庫標準描述的數據量很小。我不希望性能成爲一個問題,除非你有一個或兩個數量級以上的數據。

如果你想做一個data munging工作,你最好用PerlPython這樣的腳本語言。這些語言比C#或VB.Net更適合數據操作任務。好的,Perl和Python的免費Windows發行版可以在www.activestate.com找到。

通過使用與VBA相同的API的python-com界面,Excel可以通過Python腳本化,但是可以使用各種各樣的圖書館獲得更好的語言。同樣,這也可以通過Perl通過Win32::OLE完成。還有一些實用程序庫,如pyexcelerator,xlrdxlwt,Python和Spreadsheet::WriteExcel/Spreadsheet::ParseExcel用於Perl。也有可用的模塊用於構建可安裝的窗戶應用,例如Py2EXEPerl Dev Kit

This Stackoverflow posting討論使用Excel從Python中,包括生成與MakePy的包裝,在一個多比特深度。

你正在使用.Net,你也可以嘗試IronPython - 這是一個Python本地.Net實現,它可以在安裝合適的.Net運行時的任何地方運行。你也可以獲得一個名爲IronPythonStudio的免費Visual Studio插件)。

另一種選擇是R。 R主要是一個統計軟件包,但核心語言具有強大的數據處理能力和各種接口庫(以及其他如圖形,各種統計計算和一個Excel interface.。它實際上是一個功能強大的通用數據處理和報告工具。

0

聽起來Access並不能幫你作爲中介。 20K行對我來說聽起來不怎麼樣。你說你從Excel到Access,然後回到Excel。你需要保持Access數據嗎?

如果沒有,我建議用.Net和第三方Excel的像圖書館去FlexCel並從Excel直行到Excel在內存中。使用安裝程序或ClickOnce可輕鬆打包.Net應用程序。

2

SpreadsheetGear,我們的專業是高性能Excel兼容的電子表格組件。我們總是聽到(請參閱this page上的幾個客戶報價),SpreadsheetGear for .NET比其他選項更快更易於使用。

如果您想自己嘗試,請使用C#和VB.NET源代碼中的live ASP.NET samplesfree trial

聲明:我自己的SpreadsheetGear LLC

1

SpreadsheetGear完全岩石!您將獲得兩全其美的好處,電子表格中的所有邏輯都可供您從代碼中執行。您可以真正縮短開發時間,因爲您可以讓業務部門幫助確定業務流程的邏輯。

相關問題