මයික්‍රොසොෆ්ට් ඔෆිස් ස්ථාපනය නොකර C # හි එක්සෙල් (.XLS සහ .XLSX) ගොනුවක් නිර්මාණය කරන්නේ කෙසේද?


1897

කේතය ක්‍රියාත්මක වන යන්ත්‍රයේ එක්සෙල් ස්ථාපනය කිරීම අවශ්‍ය නොවී සී # සමඟ එක්සෙල් පැතුරුම්පතක් නිර්මාණය කරන්නේ කෙසේද?


1
"... Ms Office ස්ථාපනය නොකර?" ප්‍රශ්නයේ කොටසක් ඉතා වෘත්තීය නොවන බව පෙනේ. ඔබට C # වැඩසටහනකින් ඕනෑම වර්ගයක ගොනුවක් ජනනය කළ හැකිය ( ඒවායින් එකක් xlsහෝ xlsxගොනුවක්). ඔබේ පරිගණකයේ එය කියවිය හැකි වැඩසටහනක් තිබීම අවශ්‍යතාවයක් නොවේ (කියන්න, ද්විමය).
මයික්

30
Ike මයික් “එක්සෙල් ස්ථාපනය කිරීමට අවශ්‍ය නොවී” කෑල්ලට වෘත්තීය වීම සමග කිසිදු සම්බන්ධයක් නැත. එය පරායත්තතා ගැන ය. ප්‍රශ්නයේ මුල් පිටපත මෙසේ සඳහන් විය: “ඉතා මැනවින්, මම විවෘත කේතයට කැමතියි, එබැවින් මගේ කේතයට කිසිදු තෙවන පාර්ශවීය යැපීමක් එක් කිරීමට අවශ්‍ය නැත, තවද ගොනුව නිර්මාණය කිරීම සඳහා එක්සෙල් කෙලින්ම භාවිතා කිරීමෙන් වැළකී සිටීමට මම කැමැත්තෙමි (OLE භාවිතා කරමින් ස්වයංක්‍රීයකරණය.) “ ප්‍රශ්නය දැඩි ලෙස සරල කිරීම අවාසනාවකි.
ටෝනි

5
ඔබ සැන්ස් පුස්තකාලයක් හෝ බාහිර කේතයක් කිරීමට උත්සාහ කළ බව උපකල්පනය කළහොත්, මට xls ගොනුව සඳහා කතා කළ නොහැක, නමුත් xlsx ලිපිගොනු සඳහා, පවතින එකක් ගෙන එය zip ගොනුවකට නම් කර අන්තර්ගතය ගවේෂණය කිරීමෙන් ආරම්භ නොකරන්නේ ඇයි? ප්‍රතිලෝම ඉංජිනේරු විද්‍යාව ටිකක් ඔබට ටිකක් කියයි. විවිධ ෆෝල්ඩර සහ උප ෆෝල්ඩර වල විවිධ xml ගොනු සහ රීල්ස් ගොනු ඇත. එය ගවේෂණය කිරීමට උත්සාහ කර එය ඔබට අනුකරණය කළ හැකි යමක් දැයි බලන්න හෝ විවිධ xml නාම අවකාශයන් / යෝජනා ක්‍රමවල ලේඛන සොයාගත හැකිදැයි බලන්න.
ඇලෙක්සැන්ඩර් රයන් බගට්

Lex ඇලෙක්සැන්ඩර් රයන් බෑගට් මෙය අතිශයින්ම ප්‍රයෝජනවත් විය! ස්වයංක්‍රීය වාර්තා උත්පාදනය කිරීම සහ සිප් ලේඛනාගාරයක් ලෙස ලේඛන ගවේෂණය කිරීම අතරතුර මෙම ලිපිය හරහා පැමිණියේ ලේඛන ගොනුවක් සෑදීමට යන්නේ කුමක්ද යන්න පිළිබඳ මඳක් අවබෝධයක් ලබා දීමයි.
SentientFlesh

Answers:


1060

ඔබට ExcelLibrary නමින් පුස්තකාලයක් භාවිතා කළ හැකිය. එය ගූගල් කේතයේ පළ කර ඇති නිදහස්, විවෘත මූලාශ්‍ර පුස්තකාලයකි:

එක්සෙල් පුස්තකාලය

මෙය ඔබ ඉහත සඳහන් කළ PHP ExcelWriter හි වරායක් ලෙස පෙනේ. එය තවමත් නව .xlsx ආකෘතියට ලියන්නේ නැත, නමුත් ඔවුන් එම ක්‍රියාකාරීත්වය ඇතුලත් කිරීමට කටයුතු කරමින් සිටී.

එය ඉතා සරල, කුඩා හා භාවිතා කිරීමට පහසුය. ප්ලස් එයට ඩේටාසෙට් හෙල්පර් ඇති අතර එය එක්සෙල් දත්ත සමඟ පහසුවෙන් වැඩ කිරීමට ඩේටාසෙට් සහ ඩේටා ටේබල් භාවිතා කිරීමට ඉඩ දෙයි.

එක්සෙල් පුස්තකාලය තවමත් ක්‍රියාත්මක වන්නේ පැරණි එක්සෙල් ආකෘතිය (.xls ගොනු) සඳහා පමණක් බව පෙනේ, නමුත් අනාගතයේදී නව 2007/2010 ආකෘති සඳහා සහය එක් කරයි.

ඔබ ද භාවිතා කළ හැකිය EPPlus එක්සෙල් 2007/2010 ආකෘතිය ගොනු (.xlsx ගොනු) සඳහා පමණක් ක්රියා කරන,. ද තිබෙන NPOI සමඟ කටයුතු කරන.

අදහස් දැක්වීම්වල සඳහන් පරිදි එක් එක් පුස්තකාලය සමඟ දන්නා දෝෂ කිහිපයක් තිබේ. සියල්ලට ම, කාලය ගත වන විට EPPlus හොඳම තේරීම බව පෙනේ. එය වඩාත් ක්‍රියාශීලීව යාවත්කාලීන කර ලේඛනගත කර ඇති බව පෙනේ.

පහත දැක්වෙන පරිදි සටහන් කර ඇති පරිදි, EPPlus හට Pivot Tables සඳහා සහය ඇති අතර ExcelLibrary හට යම් සහයක් තිබිය හැකිය ( ExcelLibrary හි Pivot table issue )

ඉක්මන් යොමු කිරීම සඳහා සබැඳි කිහිපයක් මෙන්න:
ExcelLibrary - GNU Lesser GPL
EPPlus - GNU (LGPL) - තවදුරටත් නඩත්තු
නොකරන EPPlus 5 - පොලිෆෝම් වාණිජ නොවන - 2020 මැයි මස ආරම්භ වන
NPOI - Apache බලපත්‍රය

ExcelLibrary සඳහා උදාහරණ කේත කිහිපයක් මෙන්න:

මෙන්න දත්ත සමුදායකින් දත්ත ගෙන එයින් වැඩපොතක් නිර්මාණය කිරීමේ උදාහරණයකි. එක්සෙල් පුස්තකාල කේතය පතුලේ ඇති තනි පේළිය බව සලකන්න:

//Create the data set and table
DataSet ds = new DataSet("New_DataSet");
DataTable dt = new DataTable("New_DataTable");

//Set the locale for each
ds.Locale = System.Threading.Thread.CurrentThread.CurrentCulture;
dt.Locale = System.Threading.Thread.CurrentThread.CurrentCulture;

//Open a DB connection (in this example with OleDB)
OleDbConnection con = new OleDbConnection(dbConnectionString);
con.Open();

//Create a query and fill the data table with the data from the DB
string sql = "SELECT Whatever FROM MyDBTable;";
OleDbCommand cmd = new OleDbCommand(sql, con);
OleDbDataAdapter adptr = new OleDbDataAdapter();

adptr.SelectCommand = cmd;
adptr.Fill(dt);
con.Close();

//Add the table to the data set
ds.Tables.Add(dt);

//Here's the easy part. Create the Excel worksheet from the data set
ExcelLibrary.DataSetHelper.CreateWorkbook("MyExcelFile.xls", ds);

එක්සෙල් ගොනුව සෑදීම එතරම් පහසුය. ඔබට එක්සෙල් ලිපිගොනු අතින් නිර්මාණය කළ හැකිය, නමුත් ඉහත ක්‍රියාකාරිත්වය මගේ සිතට තදින්ම කාවැදුණි.


247
ExcelLibrary සුවිශේෂී EPPlus - epplus.codeplex.com විසින් අභිබවා ගොස් ඇත . යාන් එය නිතිපතා යාවත්කාලීන කරයි. එය භාවිතා කර ඇති අතර එය අප සමඟ වැඩ කළ හොඳම විවෘත කේත ව්‍යාපෘතියකි.
මාක් ඒ

3
විශාල දත්ත කට්ටල සමඟ ගනුදෙනු කිරීමේදී එක්සෙල් පුස්තකාලයට කාර්ය සාධන ගැටළු රාශියක් ඇති බව සැලකිල්ලට ගත යුතුය (තීරු විශාල ප්‍රමාණයක් සහිත පේළි 5000 ට වඩා විශාල). දැනට වැඩ කරන ස්ථානයේ කේත පදනමේ විශාල වෙනස් කිරීමක් කරමින් සිටින බැවින් අපට එය ව්‍යාපෘතියක භාවිතා කළ හැකිය.
rossisdead

ඊපීපීලස් එක්සෙල් පුස්තකාලයට වඩා අඩු දෝෂ සහිත බවක් පෙනේ, නමුත් එය ජීපීඑල් වන අතර එබැවින් විවෘත මූලාශ්‍ර ව්‍යාපෘති සඳහා විසඳුමක් පමණි.
සෙත්


6
ClosedXML ගැන කුමක් කිව හැකිද ? මම ඔබේ ව්‍යාපෘති සඳහා ප්‍රයෝජනවත් බව ඔප්පු කළ හැකිය.
ඇමේඩියස් සාන්චෙස්

592

ඔබ xlsx ආකෘතිය ගැන සතුටු වන්නේ නම්, මගේ GitHub ව්‍යාපෘතිය වන EPPlus උත්සාහ කරන්න . එය එක්සෙල් පැකේජයේ ප්‍රභවයෙන් ආරම්භ වූ නමුත් අද එය සම්පුර්ණයෙන්ම නැවත ලිවීමකි. එය පරාස, සෛල මෝස්තර, ප්‍රස්ථාර, හැඩ, පින්තූර, නම් කළ පරාස, ඔටෝ ෆිල්ටර් සහ තවත් බොහෝ දේ සඳහා සහය දක්වයි.


78
බලපත්‍රය දැන් LGPL වේ, මෙහි සටහන් මුදාහරින්න: epplus.codeplex.com/releases/view/79802
සයිමන් ඩී

13
උදාහරණ ප්‍රයෝජනවත් විය. මගේ කේතය මයික්‍රොසොෆ්ට් ඉන්ටරොප් පුස්තකාලය (දරුණු ලෙස මන්දගාමී) භාවිතා කිරීමෙන් මෙම පුස්තකාලයට (4.x අනුවාදය) පැය කිහිපයකින් වෙනස් කිරීමට මට හැකි විය. මගේ මිණුම් ලකුණ ටැබ් දෙකක් සහ සෛල 750,000 ක් පමණ සහිත ගොනුවක් ලියයි. එම්එස් ඉන්ටර්පොප් භාවිතා කිරීමට මිනිත්තු 13 ක් ගතවිය. EPPlus භාවිතා කිරීම සඳහා තත්පර 10 ක් ගතවිය, දළ වශයෙන් 80x වේගයක්. ඉතා සතුටුයි!
පෝල් චර්නොක්

3
මෙම ත්‍රෙඩ් එකේ පැහැදිලිකම සඳහා, ජීපීඑල් හි ආසාදිත කොටස නොමැතිව මෘදුකාංගය සම්බන්ධ කිරීමට LGPL ඉඩ දෙයි. ඔබට අවශ්‍ය වන්නේ ඔබ විසින් ClosedXml වෙත සිදුකරන ලද මූලාශ්‍ර වෙනස් කිරීම් පමණි. නැතහොත් ඔබ ඔබේ කේතය සෘජුවම මූලාශ්‍ර කේතය (ClosedXml එකලස් කිරීමට යොමු නොවී) ඔබේ යෙදුමට ඇතුලත් කළහොත් ඔබේ යෙදුම විවෘත කළ යුතුය.
ක්‍රිස් මාරිසික්

4
A පෝල් චර්නොච්: අපි විශාල එක්සෙල් ෂීට් ඉතා ඉක්මණින් අන්තර්වාර්‍ගයෙන් පුරවන්නෙමු. රහස වන්නේ තොග යාවත්කාලීන කිරීමකි. වස්තුවක් සාදන්න [,] අවහිර කරන්න, ජනගහනය කරන්න, ඉන්පසු එම අනුකෘතිය එක්සෙල් වෙත එක් වරකට ලියන්න: ExcelWorksheet.get_Range (පරාසය) .Value2 = block;
මාක් මෙකෙටන්

4
බලපත්ර LGPL සිට පොලිෆෝම් වාණිජ නොවන 1.0.0 බලපත්රයට මාරු වන බව පෙනේ
ලූක්

175

මයික්‍රොසොෆ්ට් ඔෆිස් සඳහා විවෘත එක්ස්එම්එල් එස්ඩීකේ 2.0 භාවිතා කිරීම ගැන කුමක් කිව හැකිද?

ප්‍රතිලාභ කිහිපයක්:

  • කාර්යාලය ස්ථාපනය කිරීම අවශ්‍ය නොවේ
  • මයික්‍රොසොෆ්ට් විසින් සාදන ලදී = යහපත් MSDN ප්‍රලේඛනය
  • ව්යාපෘතියේ භාවිතා කිරීමට එක් .නෙට් ඩීඑල්
  • SDK, diff, validator, වැනි බොහෝ මෙවලම් සමඟ පැමිණේ

සබැඳි:


3
මේ සඳහා ඩීඑල්එල් 5 MB ට වඩා වැඩි වන අතර Office 2007 ආකෘති වලට පමණක් සීමා වී ඇති බව සැලකිල්ලට ගැනීම වැදගත්ය. නමුත් නිසැකවම මට වැඩ කරන පහසුම හා වේගවත්ම විසඳුම.
ජොෂ් බ්‍රවුන්

18
V2.5 අවසන් වී ඇති අතර එය මෙතැනින් බාගත හැකිය .
Snuffleupagus

10
එස්ඩීකේ විසින් එක්ස්එම්එල් පංති වලට ආකෘතිගත කරයි, එවිට සෑම එක්ස්එම්එල් ටැගයක්ම ටැගයකට සිතියම් ගත කරනු ලැබේ, ඉන්පසු ඔබට පන්ති ධූරාවලිය ගොඩනගා ගත යුතුය (සෑම අවස්ථාවකම ළමා අවස්ථා / ටැග් එකතුවක් ඇත). මෙයින් අදහස් කරන්නේ ඔබ එක්සෙල් ගොනුවක XML ව්‍යුහය දැන සිටිය යුතු අතර එය ඉතා සංකීර්ණ බවයි. ඉහත සඳහන් කළ ඊපීප්ලස් වැනි එතුම භාවිතා කිරීම වඩා පහසුය.
සහි ආෂර්

2
මයික්රොසොෆ්ට් විවෘත XML SDK විශාල ආදර්ශ - විවෘත XML රයිටර් සොයා ගත හැක polymathprogrammer.com/2012/08/06/... නැත්නම් Stack පමාණය විසඳුමක් බලන්න stackoverflow.com/questions/11370672/...
ග්රෙග්

4
මයික්‍රොසොෆ්ට් ඕපන් එක්ස්එම්එල් එස්ඩීකේ හි විවෘත එක්ස්එම්එල් ලේඛකය විශිෂ්ට බව මට පෙනී ගියේය. ඉහත විසඳුම් භාවිතා කරමින්, (විශේෂයෙන් වින්සන්ට් ටොම්ගේ නියැදිය (පොලි ගණිතය)), විශාල දත්ත කට්ටල හරහා ගලා යන ලේඛකයෙකු ගොඩනැගීම පහසු වන අතර, ඔබ කරන දෙයට වඩා සංකීර්ණ හා වඩා සංකීර්ණ නොවන ආකාරයෙන් වාර්තා ලියයි. CSV; නමුත් ඔබ ඒ වෙනුවට xml ලියන බව. විවෘත එක්ස්එම්එල් යනු මයික්‍රොසොෆ්ට් එය නව කාර්යාල ආකෘතීන් ලෙස සලකන මානසිකත්වයයි. තවද ඔබට ඒවායේ එක්ස්එම්එල් අන්තර්ගතයන් දෙස බැලීමට අවශ්‍ය නම් ඔබට ඒවා සෑම විටම .xslx සිට .zip ගොනු ලෙස නම් කළ හැකිය.
ග්‍රෙග්

167

මම පහත සඳහන් විවෘත මූලාශ්‍ර ව්‍යාපෘති සාර්ථකව භාවිතා කර ඇත්තෙමි.

  • OOXML ආකෘති සඳහා ExcelPackage (Office 2007)

  • .XLS ආකෘතිය සඳහා NPOI (Office 2003). NPOI 2.0 (බීටා) ද XLSX සඳහා සහය දක්වයි.

මගේ බ්ලොග් සටහන් දෙස බලන්න:

සී # හි එක්සෙල් පැතුරුම්පත් .XLS සහ .XLSX නිර්මාණය කිරීම

එක්සෙල් වගුව සහ ගතික සටහන සමඟ NPOI


6
NPOI පිළිබඳ සටහනක් - පේළි සහ තීරු යොමු කිරීම් ශුන්‍ය පදනම් වේ. පවතින අච්චුවක් ජනගහනය කිරීම සඳහා හොඳින් ක්‍රියා කරයි.
ජෝන් එම්

108

එක්සෙල් ලිපිගොනු නිර්මාණය කිරීමට සහ හැසිරවීමට ඔබට OLEDB භාවිතා කළ හැකිය. මෙය පරීක්ෂා කරන්න: OLEDB භාවිතා කරමින් එක්සෙල් කියවීම සහ ලිවීම .

සාමාන්‍ය උදාහරණය:

using (OleDbConnection conn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\temp\\test.xls;Extended Properties='Excel 8.0;HDR=Yes'"))
{
  conn.Open();
  OleDbCommand cmd = new OleDbCommand("CREATE TABLE [Sheet1] ([Column1] string, [Column2] string)", conn);
  cmd.ExecuteNonQuery();
}

සංස්කරණය කරන්න - තවත් සබැඳි කිහිපයක්:


4
X64 හි ධාවනය වන විට මෙය ක්‍රියාත්මක වේදැයි යමෙකුට තහවුරු කළ හැකිද? මට හොඳටම විශ්වාසයි ජෙට් වැඩ කරන්නේ ඔබේ යෙදුම සම්පාදනය කර හෝ බිට් 32 ආකාරයෙන් ක්‍රියාත්මක වන්නේ නම් පමණි.
ලැමර්

2
මම මේ සම්බන්ධතාවය අත්හදා බැලූ අතර එය වින්ඩෝස් සර්වර් 2008 ආර් 2 x64 ආර්සී මත අසාර්ථක විය, 2007 ඔෆිස් සිස්ටම් ඩ්‍රයිවර්: දත්ත සම්බන්ධතා සංරචක ස්ථාපනය කළ යුතු බව පෙනේ [ microsoft.com/downloads/…
ක්‍රිස් රිච්නර්

25
මේ ගැන ඉතා සැලකිලිමත් වන්න - එය විශාල කැත කැටය (නිදසුනක් ලෙස, සමහර විට එය තීරු වර්ගයක් අනුමාන කරන අතර නොගැලපෙන සියලු දත්ත ඉවතලයි).
dbkk

9
මෙම ක්රමය භාවිතා කරන්නේ නම් යමෙකු ඉතා ප්රවේශම් විය යුතුය. පරිපූර්ණ ආකෘතියකින් තොර දත්ත සඳහා එය ඉතා දෝෂ සහිත බව මට පෙනී ගියේය.
කෙනී මෑන්

9
විශාල ව්‍යාපෘතියක OleDb භාවිතා කිරීමට සිදු වූ පුද්ගලයෙකු ලෙස, මම කියන්නේ එයින් ඉවත්ව සිටින්න! සමහර විට එය ආකෘතිය තේරුම් ගැනීමට නොහැකි වූ නිසා පමණක් සෛල අගයක් ලබා ගැනීමට නොහැකි වේ. එයට මකාදැමීමේ මෙහෙයුමක් නොමැත. සුළු වශයෙන් සැපයුම්කරුගේ වෙනසක් සමඟ වුවද එය සම්පූර්ණයෙන්ම වෙනස් හා අනපේක්ෂිත ලෙස ක්‍රියා කරයි. ඔප්පු කළ වාණිජ විසඳුමක් සඳහා යන්නැයි මම කියමි.
Caner Öncü

80

.NET සඳහා වන වාණිජ විසඳුම වන SpreadsheetGear එය කරනු ඇත.

ඔබට සජීවී ASP.NET (C # සහ VB) සාම්පල මෙතැනින් දැකගත හැකි අතර ඇගයීමේ අනුවාදයක් මෙතැනින් බාගන්න .

වියාචනය: මා සතුව පැතුරුම්පත් ගියර් එල්එල්සී ඇත


10
ඔබට විශිෂ්ට නිෂ්පාදනයක් ඇති නමුත් මම හිතන්නේ මෙහි සිටින බොහෝ දෙනෙක් නොමිලේ විසඳුම් අපේක්ෂා කරති. එමඟින් පහත වැටෙන ඡන්ද පැහැදිලි කළ හැකිය.
md1337

65

මා භාවිතා කළ විකල්ප කිහිපයක්:

එක්ස්එල්එස්එක්ස් අත්‍යවශ්‍ය දෙයක් නම් : එක්සෙල් පැකේජය හොඳ ආරම්භයක් වන නමුත් සංවර්ධකයා ඒ මත වැඩ කිරීමෙන් ඉවත් වූ විට මිය ගියේය. එක්ස්එම්එල් එතැනින් තෝරාගෙන විශේෂාංග කිහිපයක් එකතු කළේය. එක්ස්එම්එල් නරක විකල්පයක් නොවේ, මම තවමත් නිෂ්පාදන වෙබ් අඩවි කිහිපයක එය භාවිතා කරමි.

මගේ නව ව්යාපෘති සඳහා, නමුත්, මම භාවිතා කරනවා NPOI , එම .NET වරාය Apache POI . NPOI 2.0 (ඇල්ෆා) ද XLSX සඳහා සහය දක්වයි.


ඔබට XLS සඳහා සහය දැක්වීමට අවශ්‍ය නම් ExcelPackage සමඟ ප්‍රවේශම් වන්න. මට එය සමඟ අමාරු කාලයක් තිබූ අතර අවසානයේ එක්සෙල් පුස්තකාලයට මාරු විය.
ජෙරමි

අනිවාර්යයෙන්ම ඇත්ත. ExcelPackage / ExML යනු ඔබට XLSX සහාය අවශ්‍ය නම් හොඳ විකල්පයක් පමණි.
Nate

5
ExcelPackage හි අනුප්‍රාප්තිකයෙකු සිටින බව සලකන්න: XLSX සඳහා සහය දක්වන EPPlus ( epplus.codeplex.com ). උදාහරණයක් ලෙස NPOI හා සසඳන විට මගේ එකම සැලකිල්ල කාර්ය සාධනයයි, උදා: තීරු විශාල ප්‍රමාණයක් ඇති විට.
ප්‍රග්මෙටෙක්

63

අතිශයින්ම සැහැල්ලු විකල්පයක් වන්නේ HTML වගු භාවිතා කිරීමයි. ගොනුවක හිස, ශරීරය සහ වගු ටැග් නිර්මාණය කර එය .xls දිගුවක් සහිත ගොනුවක් ලෙස සුරකින්න. සූත්‍ර ඇතුළුව ප්‍රතිදානය හැඩගස්වා ගැනීමට ඔබට භාවිතා කළ හැකි Microsoft විශේෂිත ගුණාංග ඇත.

ඔබ මෙය වෙබ් යෙදුමක කේතනය නොකරන බව මට වැටහී ඇත, නමුත් මෙන්න HTML වගුවක් හරහා එක්සෙල් ගොනුවක සංයුතිය පිළිබඳ උදාහරණයකි . ඔබ කොන්සෝල යෙදුමක්, ඩෙස්ක්ටොප් යෙදුමක් හෝ සේවාවක් කේත කරන්නේ නම් මෙම තාක්ෂණය භාවිතා කළ හැකිය.


6
එය එතරම් තාවකාලික නමුත් එය ක්‍රියාත්මක වේ (විවෘත කිරීම පිළිබඳ එක්සෙල් අනතුරු ඇඟවීමක් කිරීම ගැන සඳහන් නොකල යුතුය) සහ එය ඉතා සරල ය, එයට විසඳුමක් ලෙස ස්ථානයක් තිබීම සුදුසුය. ඔබට
එක්සෙල්

3
මෙම විසඳුම මට හොඳින් ක්‍රියාත්මක විය, ඔබට .xlsx දිගුව භාවිතා කළ නොහැකි බව සලකන්න
ජිල්

මගේ සංවිධානයේ සමහර පුද්ගලයින්ට 2010 දී සහ ඊට ඉහළින් ඇති එක්සෙල් ලිපිගොනු විවෘත කළ නොහැක. ගැටලුව කුමක්දැයි නොදනී, නමුත් මට මගේම OpenXML ක්‍රියාත්මක කිරීම සිදු කිරීමට සිදුවිය. (සොගර්ගේ පිළිතුර බලන්න)
ක්‍රිස්ටන් හැමාක්

49

ඔබ එක්සෙල් 2007/2010 ගොනු නිර්මාණය කරන්නේ නම් මෙම විවෘත කේත ව්‍යාපෘතිය උත්සාහ කර බලන්න: https://github.com/closedxml/closedxml

XML ලේඛනවල කරදර සමඟ කටයුතු නොකර ලිපිගොනු (VBA හා සමාන) හැසිරවීමට එය වස්තු නැඹුරු ක්‍රමයක් සපයයි. C # සහ Visual Basic (VB) වැනි ඕනෑම .NET භාෂාවකට එය භාවිතා කළ හැකිය.

එක්සෙල් යෙදුමකින් තොරව එක්සෙල් 2007/2010 ගොනු නිර්මාණය කිරීමට ClosedXML ඔබට ඉඩ දෙයි. සාමාන්‍ය උදාහරණය වන්නේ වෙබ් සේවාදායකයක එක්සෙල් වාර්තා නිර්මාණය කිරීමයි:

var workbook = new XLWorkbook();
var worksheet = workbook.Worksheets.Add("Sample Sheet");
worksheet.Cell("A1").Value = "Hello World!";
workbook.SaveAs("HelloWorld.xlsx");

9
මම මෙය විශාල එක්සෙල් ෂීට් සාදන ව්‍යාපෘතියක භාවිතා කිරීමට උත්සාහ කළෙමි. විශිෂ්ට පුස්තකාලයක්, නමුත් කාර්ය සාධනයේ අතිශය දුර්වලයි. මම වැඩ කරමින් සිටින ව්‍යාපෘතිය සඳහා සංසන්දනයක් කළෙමි: ClosedXML (v 0.53.3) එම්එස් 92,489 ක් ගත් අතර ඊපීප්ලස් (v 2.9.03, පරීක්ෂා කිරීම සඳහා - එය ජීපීඑල් නිසා අපට භාවිතා කළ නොහැක) එම්එස් 16,500 ක් ගත්තේය.
Druid

1
Rid ඩ්‍රොයිඩ් බලපත්‍රය LGPL යැයි ඔබ සිතන්නේ ඔබ ප්‍රභව කේතය ClosedXML වෙත වෙනස් නොකරන ලෙස උපකල්පනය කර එය epplus.codeplex.com/license
ක්‍රිස් මාරිසික්


47

ඔබට ඇත්ත වශයෙන්ම C # හි ඇති අන්තර් පංති පරීක්ෂා කිරීමට අවශ්‍ය විය හැකිය (උදා: Microsoft.Office.Interop.Excelඔබ පවසන්නේ OLE නැත (මෙය එසේ නොවේ), නමුත් අන්තර් පංති භාවිතා කිරීම ඉතා පහසුය. C # ප්‍රලේඛනය මෙතැනින් බලන්න (එක්සෙල් සඳහා අන්තර් ක්‍රියාකාරීත්වය ආරම්භ වේ C # PDF හි 1072 පිටුව).

ඔබ ඒවා අත්හදා බැලුවේ නැත්නම් ඔබ පුදුමයට පත් විය හැකිය.

කරුණාකර මේ පිළිබඳව මයික්‍රොසොෆ්ට් ස්ථාවරය ගැන අනතුරු අඟවන්න :

මයික්‍රොසොෆ්ට් දැනට නිර්දේශ කර නැති අතර සහාය නොදක්වයි, කිසිදු අවධානයට ලක් නොවූ, අන්තර්ක්‍රියාකාරී නොවන සේවාදායක යෙදුමකින් හෝ සංරචකයකින් (ඒඑස්පී, ඒඑස්පී. හෝ මෙම පරිසරය තුළ කාර්යාලය ක්‍රියාත්මක වන විට අවහිර වීම.


6
නමුත් ඔබ සෑම දෙයක්ම අතින් බැහැර කරන බවට වග බලා ගත යුතුය, එසේ නොමැතිනම් ඔබට මතකය කාන්දු වනු ඇත
මැජික් කැට්

8
Ick රිකී බී: එසේම, ඉන්ටර්පොප් සමඟ මගේ අත්දැකීම් අනුව එය එක්සෙල් භාවිතා කරයි. අපි එය භාවිතා කරන සෑම අවස්ථාවකම, යන්ත්‍රය මත එක්සෙල් ස්ථාපනය කර නොමැති නම්, අපට COM ව්‍යතිරේකයන් ලැබෙනු ඇත.
මැජික් කැට්

1
OLE සමඟ, ඉතා පරිස්සමින් බැහැර කිරීම් සමඟ වුවද, එය අවසානයේදී මතකය කාන්දු වීම හෝ බිඳ වැටීම සිදුවේ. සහභාගී වූ යෙදුම් / වැඩපොළවල් සඳහා මෙය තර්ක කළ හැකි ය, නමුත් සේවාදායකයන් සඳහා නිර්දේශ නොකරයි (එම්එස් වෙත කේබී එකක් ඇත). අපගේ සේවාදායකය සඳහා, අපි එය රාත්‍රියේ නැවත ආරම්භ කරමු. නැවතත්, එය හරි.
ජෙනිෆර් සූක්

11
E ජෙෆ්රි: අහ්, ඔබ මාව ඒ සඳහා වැඩ කිරීමට සලස්වයි :) -> support.microsoft.com/kb/257757 මයික්‍රොසොෆ්ට් දැනට නිර්දේශ නොකරන අතර සහාය නොදක්වයි. අන්තර්ක්‍රියාකාරී සේවාදායක යෙදුම ...
ජෙනිෆර් සූක්

4
මම මෙම සාකච්ඡාවට පැමිණෙන්නේ සතියකට වඩා වැඩි කාලයක් අන්තර් ක්‍රියාකාරකම් සඳහා අරගල කිරීමෙන් පසුව වන අතර ඔබේ අවශ්‍යතා ඉතා සරල නම් මිස මෙය සාර්ථක නොවනු ඇත. ඔබේ පැතුරුම්පත සංයුති කිරීම සඳහා වන සහාය ඉතා පහත් ය, එය .xls ගොනුවක් ජනනය කිරීමට හේතුව මිස පැතලි .csv ගොනුවක් නොවේ. උදාහරණයක් ලෙස, ඔබ සෛලයක අක්ෂර 911 කට වඩා ප්‍රතිදානය කිරීමට උත්සාහ කර තිබේද, නැතහොත් ඒකාබද්ධ කරන ලද සෛලවල පළල ස්ථාවර ආකාරයකින් සැකසීමට ඔබ උත්සාහ කර තිබේද? මා සතුව ඇති අතර, මම දැන් මෙම කපටිකමට කොතරම් වෛර කරනවාදැයි ඔබට පැවසිය නොහැක ... ඔබටම උදව්වක් කර මෙම සාකච්ඡාවේ සඳහන් නිදහස් පුස්තකාලයක් සමඟ යන්න.
md1337

34

මෙන්න සම්පූර්ණයෙන්ම නොමිලේ C # පුස්තකාලයක්, එය ඔබට DataSet, DataTableහෝ List<>අව්‍යාජ එක්සෙල් 2007 .xlsx ගොනුවකට අපනයනය කිරීමට ඉඩ සලසයි , OpenXML පුස්තකාල භාවිතා කරමින්:

http://mikesknowledgebase.com/pages/CSharp/ExportToExcel.htm

සම්පූර්ණ මූලාශ්‍ර කේතය ලබා දී ඇත - නොමිලේ - උපදෙස් සමඟ, සහ නිරූපණ යෙදුමක්.

ඔබගේ යෙදුමට මෙම පන්තිය එක් කිරීමෙන් පසුව, ඔබට එක් කේත පේළියකින් ඔබේ දත්ත කට්ටලය එක්සෙල් වෙත අපනයනය කළ හැකිය:

CreateExcelFile.CreateExcelDocument(myDataSet, "C:\\Sample.xlsx");

එය ඊට වඩා සරල නොවේ ...

ඔබේ සේවාදායකයේ එක්සෙල් සිටීම පවා අවශ්‍ය නොවේ.


1
මෙය ටිකක් නොමඟ යවන බවක් පෙනේ, ඔබ සියලු අංග ලබා ගැනීම සඳහා පරිත්‍යාගයක් ඉල්ලා සිටින බැවින්.
UrbanEsc

1
එය අර්ධ වශයෙන් සත්‍යයකි: සම්පුර්ණයෙන්ම නොමිලේ ලබා දෙන අනුවාදය ඔබ වෙනුවෙන් පරිපූර්ණ .xlsx ගොනුවක් ජනනය කරනු ඇති අතර සියලු ප්‍රභව කේත සපයනු ලැබේ. ඔබ එම පුණ්‍යායතන දෙකෙන් එකකට ඩොලර් 10 ක් හෝ ඊට වැඩි මුදලක් පරිත්‍යාග කරන්නේ නම් (එයින් මට කිසිසේත්ම ලැබෙන්නේ නැත), එවිට ඔබට ආකෘතිකරණය, දිනයන් යනාදිය පෙන්වන “වඩා හොඳ” අනුවාදයක් ලැබෙනු ඇත. තෙවන පාර්ශවීය නිෂ්පාදනවල පිරිවැය සැලකිල්ලට ගෙන, ඒ වෙනුවට ඩොලර් 10 ක් හොඳ කටයුත්තකට පරිත්‍යාග කිරීම වටී!
මයික් ග්ලෙඩ්හිල්


23

ඔබට GemBox.Sreadsheet දෙස බැලීමට අවශ්‍ය විය හැකිය .

ඔවුන් සතුව සියලු අංගයන්ගෙන් යුත් නිදහස් අනුවාදයක් ඇති නමුත් එය ඔබේ අවශ්‍යතාවයට යටත් වන්නේ නම් පත්රයකට පේළි 150 ක් සහ වැඩපොතකට තහඩු 5 කට සීමා වේ.

මට තවම එය භාවිතා කිරීමට අවශ්‍යතාවයක් නොතිබුණි, නමුත් සිත්ගන්නා සුළුය.


21

සමමුහුර්ත කිරීම අත්‍යවශ්‍ය XlsIO හට මෙය කළ හැකිය. එයට මයික්‍රොසොෆ්ට් කාර්යාලය මත යැපීමක් නොමැති අතර විවිධ වේදිකා සඳහා නිශ්චිත සහයෝගයක් ද ඇත.

කේත නියැදිය:

//Creates a new instance for ExcelEngine.
ExcelEngine excelEngine = new ExcelEngine();
//Loads or open an existing workbook through Open method of IWorkbooks
IWorkbook workbook = excelEngine.Excel.Workbooks.Open(fileName);
//To-Do some manipulation|
//To-Do some manipulation
//Set the version of the workbook.
workbook.Version = ExcelVersion.Excel2013;
//Save the workbook in file system as xlsx format
workbook.SaveAs(outputFileName);

ඔබ සුදුසුකම් ලැබුවහොත් (ඇ.ඩො. මිලියනයකට වඩා අඩු ආදායමක්) ප්‍රජා බලපත්‍ර වැඩසටහන හරහා මුළු පාලන කට්ටලයම නොමිලේ ලබා ගත හැකිය . සටහන: මම සමමුහුර්තකරණය සඳහා වැඩ කරමි.


18

හොඳින්,

ඔබට Aspose වැනි තෙවන පාර්ශවීය පුස්තකාලයක් ද භාවිතා කළ හැකිය .

මෙම පුස්තකාලයට ඔබේ පරිගණකයේ එක්සෙල් ස්ථාපනය කිරීම අවශ්‍ය නොවන වාසියක් ඇත.


වඩාත් නිවැරදිව කිවහොත්, ඔබේ .NET යෙදුමේ එක්සෙල් (XLS, XLSX) ගොනු නිර්මාණය කිරීම සඳහා .NET සඳහා Aspose.Cells භාවිතා කළ හැකිය .
ෂාසාඩ් ලතීෆ්

9
ඔව් ඔබට අවම බලපත්‍ර ගාස්තුව ඩොලර් 999 ක් ගෙවීමට අවශ්‍ය නැතිනම් ඔබට පුළුවන්. MikeKnowledgeBase පුස්තකාලය උත්සාහ කරන්න ... මෙය ඩොලර් 999 කට වඩා ලාභදායී වේ !!
මයික් ග්ලෙඩ්හිල්

17

OpenXML යනු සේවාදායකයේ MS Excel ස්ථාපනය කිරීමෙන් වළක්වා ගත හැකි හොඳ විකල්පයකි. මයික්‍රොසොෆ්ට් විසින් සපයන ලද විවෘත XML SDK 2.0 පැකේජයක් තුළ විවෘත XML පැකේජ සහ යටින් පවතින විවෘත XML ක්‍රමලේඛන අංග හැසිරවීමේ කාර්යය සරල කරයි. විවෘත එක්ස්එම්එල් යෙදුම් ක්‍රමලේඛ අතුරුමුහුණත (ඒපීඅයි) විවෘත එක්ස්එම්එල් පැකේජ මත සංවර්ධකයින් විසින් ඉටු කරනු ලබන බොහෝ පොදු කාර්යයන් ආවරණය කරයි.

මෙය පරීක්ෂා කරන්න OpenXML: විකල්පය සේවාදායකයේ MS Excel ස්ථාපනය කිරීමෙන් වළකින්න


17

විවිධ ඔෆිස් 2003 එක්ස්එම්එල් පුස්තකාල කුඩා එක්සෙල් ලිපිගොනු සඳහා ඉතා හොඳින් ක්‍රියා කරයි. කෙසේ වෙතත්, XML ආකෘතියෙන් සුරකින ලද විශාල වැඩපොතක විශාලත්වය ගැටලුවක් බව මට පෙනේ. උදාහරණයක් ලෙස, මා සමඟ වැඩ කරන වැඩපොතක් නව (සහ වඩාත් තදින් ඇසුරුම් කර ඇති) 40MB වනු ඇත. XLSX ආකෘතිය 360MB XML ගොනුවක් බවට පත්වේ.

මගේ පර්යේෂණය මා ගෙන ඇති තාක් දුරට, පැරණි ද්විමය ගොනු ආකෘති වලට ප්‍රතිදානය කිරීමට ඉඩ දෙන වාණිජ පැකේජ දෙකක් තිබේ. අර තියෙන්නේ:

මේ දෙකම ලාභදායී නොවේ (පිළිවෙලින් 500USD සහ 800USD, මම හිතන්නේ). නමුත් දෙකම එක්සෙල් වලින් ස්වාධීනව ක්‍රියා කරයි.

මට කුතුහලයක් ඇති වන්නේ OpenOffice.org වැනි දේ සඳහා වන එක්සෙල් ප්‍රතිදාන මොඩියුලයයි. මම හිතන්නේ ඒවා ජාවා සිට .නෙට් වෙත ගෙන යා හැකිද යන්නයි.


මෙය .net සහ java යන දෙවර්ගයේම ක්‍රියාත්මක වන අතර එය මිල අධික නොවේ. SmartXLS smartxls.com
liya


15

මම මෑතකදී FlexCel.NET භාවිතා කර ඇති අතර එය විශිෂ්ට පුස්තකාලයක් බව මට පෙනී ගියේය! බොහෝ මෘදුකාංග නිෂ්පාදන ගැන මම එසේ නොකියමි. මෙහි සම්පූර්ණ විකුණුම් තලය ලබා දීමෙන් පලක් නැත, ඔබට ඔවුන්ගේ වෙබ් අඩවියේ ඇති සියලුම අංග කියවිය හැකිය.

එය වාණිජ නිෂ්පාදනයක් වන නමුත් ඔබ එය මිලදී ගන්නේ නම් සම්පූර්ණ ප්‍රභවය ඔබට ලැබේ. එබැවින් ඔබට සැබවින්ම අවශ්‍ය නම් එය ඔබේ එක්රැස්වීමට සම්පාදනය කළ හැකි යැයි මම සිතමි. එසේ නොමැති නම් එය xcopy සඳහා එක් අමතර එකලස් කිරීමක් පමණි - වින්‍යාස කිරීමක් හෝ ස්ථාපනය කිරීමක් හෝ එවැනි කිසිවක් නැත.

.NET රාමුව, තෙවන පාර්ශවීය පුස්තකාල නොමැතිව මෙය කිරීමට ඔබට ක්‍රමයක් සොයා ගත හැකි යැයි මම නොසිතමි. පැහැදිලිවම, ඒ සඳහා සහයෝගය ලබා දී නොමැති අතර OLE ස්වයංක්‍රීයකරණය යනු වේදනාකාරී ලෝකයකි.


15

System.IO.StreamWriter භාවිතා කරමින් එක්සෙල් වස්තුව භාවිතා නොකර විශිෂ්ට ලෙස දත්ත සමුදාය අපනයනය කිරීම සඳහා මම සරල කේතයක් ලියා ඇත.

පහත දැක්වෙන්නේ දත්ත කට්ටලයේ සියලුම වගු කියවා ඒවා එකින් එක තහඩු වලට ලියන කේතයයි. මම මේ ලිපියෙන් උදව් ගත්තා .

public static void exportToExcel(DataSet source, string fileName)
{
        const string endExcelXML = "</Workbook>";
        const string startExcelXML = "<xml version>\r\n<Workbook " +
                 "xmlns=\"urn:schemas-microsoft-com:office:spreadsheet\"\r\n" +
                 " xmlns:o=\"urn:schemas-microsoft-com:office:office\"\r\n " +
                 "xmlns:x=\"urn:schemas-    microsoft-com:office:" +
                 "excel\"\r\n xmlns:ss=\"urn:schemas-microsoft-com:" +
                 "office:spreadsheet\">\r\n <Styles>\r\n " +
                 "<Style ss:ID=\"Default\" ss:Name=\"Normal\">\r\n " +
                 "<Alignment ss:Vertical=\"Bottom\"/>\r\n <Borders/>" +
                 "\r\n <Font/>\r\n <Interior/>\r\n <NumberFormat/>" +
                 "\r\n <Protection/>\r\n </Style>\r\n " +
                 "<Style ss:ID=\"BoldColumn\">\r\n <Font " +
                 "x:Family=\"Swiss\" ss:Bold=\"1\"/>\r\n </Style>\r\n " +
                 "<Style     ss:ID=\"StringLiteral\">\r\n <NumberFormat" +
                 " ss:Format=\"@\"/>\r\n </Style>\r\n <Style " +
                 "ss:ID=\"Decimal\">\r\n <NumberFormat " +
                 "ss:Format=\"0.0000\"/>\r\n </Style>\r\n " +
                 "<Style ss:ID=\"Integer\">\r\n <NumberFormat " +
                 "ss:Format=\"0\"/>\r\n </Style>\r\n <Style " +
                 "ss:ID=\"DateLiteral\">\r\n <NumberFormat " +
                 "ss:Format=\"mm/dd/yyyy;@\"/>\r\n </Style>\r\n " +
                 "</Styles>\r\n ";
        System.IO.StreamWriter excelDoc = null;
        excelDoc = new System.IO.StreamWriter(fileName);

        int sheetCount = 1;
        excelDoc.Write(startExcelXML);
        foreach (DataTable table in source.Tables)
        {
            int rowCount = 0;
            excelDoc.Write("<Worksheet ss:Name=\"" + table.TableName + "\">");
            excelDoc.Write("<Table>");
            excelDoc.Write("<Row>");
            for (int x = 0; x < table.Columns.Count; x++)
            {
                excelDoc.Write("<Cell ss:StyleID=\"BoldColumn\"><Data ss:Type=\"String\">");
                excelDoc.Write(table.Columns[x].ColumnName);
                excelDoc.Write("</Data></Cell>");
            }
            excelDoc.Write("</Row>");
            foreach (DataRow x in table.Rows)
            {
                rowCount++;
                //if the number of rows is > 64000 create a new page to continue output
                if (rowCount == 64000)
                {
                    rowCount = 0;
                    sheetCount++;
                    excelDoc.Write("</Table>");
                    excelDoc.Write(" </Worksheet>");
                    excelDoc.Write("<Worksheet ss:Name=\"" + table.TableName + "\">");
                    excelDoc.Write("<Table>");
                }
                excelDoc.Write("<Row>"); //ID=" + rowCount + "
                for (int y = 0; y < table.Columns.Count; y++)
                {
                    System.Type rowType;
                    rowType = x[y].GetType();
                    switch (rowType.ToString())
                    {
                        case "System.String":
                            string XMLstring = x[y].ToString();
                            XMLstring = XMLstring.Trim();
                            XMLstring = XMLstring.Replace("&", "&");
                            XMLstring = XMLstring.Replace(">", ">");
                            XMLstring = XMLstring.Replace("<", "<");
                            excelDoc.Write("<Cell ss:StyleID=\"StringLiteral\">" +
                                           "<Data ss:Type=\"String\">");
                            excelDoc.Write(XMLstring);
                            excelDoc.Write("</Data></Cell>");
                            break;
                        case "System.DateTime":
                            //Excel has a specific Date Format of YYYY-MM-DD followed by  
                            //the letter 'T' then hh:mm:sss.lll Example 2005-01-31T24:01:21.000
                            //The Following Code puts the date stored in XMLDate 
                            //to the format above
                            DateTime XMLDate = (DateTime)x[y];
                            string XMLDatetoString = ""; //Excel Converted Date
                            XMLDatetoString = XMLDate.Year.ToString() +
                                 "-" +
                                 (XMLDate.Month < 10 ? "0" +
                                 XMLDate.Month.ToString() : XMLDate.Month.ToString()) +
                                 "-" +
                                 (XMLDate.Day < 10 ? "0" +
                                 XMLDate.Day.ToString() : XMLDate.Day.ToString()) +
                                 "T" +
                                 (XMLDate.Hour < 10 ? "0" +
                                 XMLDate.Hour.ToString() : XMLDate.Hour.ToString()) +
                                 ":" +
                                 (XMLDate.Minute < 10 ? "0" +
                                 XMLDate.Minute.ToString() : XMLDate.Minute.ToString()) +
                                 ":" +
                                 (XMLDate.Second < 10 ? "0" +
                                 XMLDate.Second.ToString() : XMLDate.Second.ToString()) +
                                 ".000";
                            excelDoc.Write("<Cell ss:StyleID=\"DateLiteral\">" +
                                         "<Data ss:Type=\"DateTime\">");
                            excelDoc.Write(XMLDatetoString);
                            excelDoc.Write("</Data></Cell>");
                            break;
                        case "System.Boolean":
                            excelDoc.Write("<Cell ss:StyleID=\"StringLiteral\">" +
                                        "<Data ss:Type=\"String\">");
                            excelDoc.Write(x[y].ToString());
                            excelDoc.Write("</Data></Cell>");
                            break;
                        case "System.Int16":
                        case "System.Int32":
                        case "System.Int64":
                        case "System.Byte":
                            excelDoc.Write("<Cell ss:StyleID=\"Integer\">" +
                                    "<Data ss:Type=\"Number\">");
                            excelDoc.Write(x[y].ToString());
                            excelDoc.Write("</Data></Cell>");
                            break;
                        case "System.Decimal":
                        case "System.Double":
                            excelDoc.Write("<Cell ss:StyleID=\"Decimal\">" +
                                  "<Data ss:Type=\"Number\">");
                            excelDoc.Write(x[y].ToString());
                            excelDoc.Write("</Data></Cell>");
                            break;
                        case "System.DBNull":
                            excelDoc.Write("<Cell ss:StyleID=\"StringLiteral\">" +
                                  "<Data ss:Type=\"String\">");
                            excelDoc.Write("");
                            excelDoc.Write("</Data></Cell>");
                            break;
                        default:
                            throw (new Exception(rowType.ToString() + " not handled."));
                    }
                }
                excelDoc.Write("</Row>");
            }
            excelDoc.Write("</Table>");
            excelDoc.Write(" </Worksheet>");
            sheetCount++;
        }


        excelDoc.Write(endExcelXML);
        excelDoc.Close();
    }

1
ලිපියේ සඳහන් වන පරිදි, එය එක්ස්එල්එස් ගොනුවක් වීමට වඩා එක්සෙල් කියවනු ඇති අතර එයින් අදහස් කරන්නේ එය ක්‍රියාත්මක විය හැක්කේ එක්සෙල් තුළ මිස පැතුරුම්පත් කියවන වෙනත් වැඩසටහන් නොවන බවයි. නමුත් මෙහි සමාන HTML වගු පිළිතුරු වලට වඩා එය හොඳය!
රූප්

Xlsx සඳහා සහය දක්වයිද ? OpenXML ?
කික්නෙට්

14

ඔබගේ ගැටළුව කෙලින්ම ආමන්ත්‍රණය කරන තෙවන පාර්ශවීය විසඳුමකට තවත් යොමු කිරීමක් එක් කිරීමට අවශ්‍යය: http://www.officewriter.com

(වියාචනය: මම වැඩ කරන්නේ OfficeWriter නිපදවන සොෆ්ට්ආර්ටිසන්ස් සඳහායි)



12

නියැදි කේතය සමඟ සම්පුර්ණ කළ LINQ සිට XML දක්වා එය කළ හැකි ක්‍රමයක් මෙන්න:

එක්ස්එම්එල් වෙත ලින්ක් සමඟ එක්සෙල් දත්ත ඉක්මනින් ආනයනය කර අපනයනය කරන්න

ඔබට නම් අවකාශයන් ආනයනය කිරීමට සිදු වන බැවින් එය ටිකක් සංකීර්ණයි, නමුත් එය බාහිර පරායත්තතාවයන් වළක්වා ගැනීමට ඉඩ සලසයි.

.


12

මයික්‍රොසොෆ්ට් එක්සෙල් ස්ථාපනය කිරීමට අවශ්‍ය නොවන සමහර තෙවන පාර්ශවීය කොටස් වෙළෙන්දෝ ඉන්ෆ්‍රැජිස්ටික්ස් හෝ සමමුහුර්තකරණය වැනි ඉතා හොඳ එක්සෙල් අපනයන හැකියාවන් සපයයි.

මෙම වෙළෙන්දෝ උසස් UI ජාලක සංරචක ද සපයන හෙයින්, ඔබේ යෙදුමේ පරිශීලක අතුරුමුහුණතෙහි ජාලකයක වර්තමාන තත්වය අනුකරණය කිරීමට එක්සෙල් අපනයනයක ශෛලිය හා පිරිසැලසුම ඔබට අවශ්‍ය නම් මෙම සංරචක විශේෂයෙන් පහසුය.

ඔබගේ අපනයනය අපනයනය කළ යුතු දත්ත අවධාරණය කරමින් සහ UI සමඟ කිසිදු සම්බන්ධයක් නොමැතිව සේවාදායක පැත්ත ක්‍රියාත්මක කිරීමට අදහස් කරන්නේ නම්, මම නොමිලේ විවෘත මූලාශ්‍ර විකල්පයන්ගෙන් එකක් (උදා: ExcelLibrary) සඳහා යන්නෙමි.

මයික්‍රොසොෆ්ට් ඔෆිස් කට්ටලයේ සේවාදායක පාර්ශවීය ස්වයංක්‍රීයකරණය භාවිතා කිරීමට උත්සාහ කළ ව්‍යාපෘති සමඟ මම මීට පෙර සම්බන්ධ වී සිටිමි. මෙම අත්දැකීම මත පදනම්ව මම එම ප්‍රවේශයට එරෙහිව තරයේ නිර්දේශ කරමි.


12
public class GridViewExportUtil
{
    public static void Export(string fileName, GridView gv)
    {
        HttpContext.Current.Response.Clear();
        HttpContext.Current.Response.AddHeader(
            "content-disposition", string.Format("attachment; filename={0}", fileName));
        HttpContext.Current.Response.ContentType = "application/ms-excel";

        using (StringWriter sw = new StringWriter())
        {
            using (HtmlTextWriter htw = new HtmlTextWriter(sw))
            {
                //  Create a form to contain the grid
                Table table = new Table();

                //  add the header row to the table
                if (gv.HeaderRow != null)
                {
                    GridViewExportUtil.PrepareControlForExport(gv.HeaderRow);
                    table.Rows.Add(gv.HeaderRow);
                }

                //  add each of the data rows to the table
                foreach (GridViewRow row in gv.Rows)
                {
                    GridViewExportUtil.PrepareControlForExport(row);
                    table.Rows.Add(row);
                }

                //  add the footer row to the table
                if (gv.FooterRow != null)
                {
                    GridViewExportUtil.PrepareControlForExport(gv.FooterRow);
                    table.Rows.Add(gv.FooterRow);
                }

                //  render the table into the htmlwriter
                table.RenderControl(htw);

                //  render the htmlwriter into the response
                HttpContext.Current.Response.Write(sw.ToString());
                HttpContext.Current.Response.End();
            }
        }
    }

    /// <summary>
    /// Replace any of the contained controls with literals
    /// </summary>
    /// <param name="control"></param>
    private static void PrepareControlForExport(Control control)
    {
        for (int i = 0; i < control.Controls.Count; i++)
        {
            Control current = control.Controls[i];
            if (current is LinkButton)
            {
                control.Controls.Remove(current);
                control.Controls.AddAt(i, new LiteralControl((current as LinkButton).Text));
            }
            else if (current is ImageButton)
            {
                control.Controls.Remove(current);
                control.Controls.AddAt(i, new LiteralControl((current as ImageButton).AlternateText));
            }
            else if (current is HyperLink)
            {
                control.Controls.Remove(current);
                control.Controls.AddAt(i, new LiteralControl((current as HyperLink).Text));
            }
            else if (current is DropDownList)
            {
                control.Controls.Remove(current);
                control.Controls.AddAt(i, new LiteralControl((current as DropDownList).SelectedItem.Text));
            }
            else if (current is CheckBox)
            {
                control.Controls.Remove(current);
                control.Controls.AddAt(i, new LiteralControl((current as CheckBox).Checked ? "True" : "False"));
            }

            if (current.HasControls())
            {
                GridViewExportUtil.PrepareControlForExport(current);
            }
        }
    }
}

හායි මෙම විසඳුම වන්නේ ඔබේ ජාලක දර්ශනය ඔබේ එක්සෙල් ගොනුවට අපනයනය කිරීමයි


7
නැත, මෙය සත්‍ය එක්සෙල් ගොනුවකට වඩා එක්සෙල් ගොනුවක් ලෙස සලකුණු කළ HTML ජනනය කරයි. ඔව්, එක්සෙල් විසින්ම එම හරි විවෘත කරනු ඇති නමුත් පැතුරුම්පත් පරිභෝජනය කරන වෙනත් වැඩසටහන් - මයික්‍රොසොෆ්ට් හි නොමිලේ එක්සෙල් නරඹන්නා ඇතුළුව - උදාහරණයක් ලෙස - එය පිළිගන්නේ නැත. මෙහි ඇති එක් පුස්තකාලයක් භාවිතා කර සැබෑ එක්සෙල් ගොනුවක් සෑදීම වඩා හොඳය.
රූප්

නූල් එකතු කිරීමකට වඩා අන්තර්ගත-විස්ථාපන ශීර්ෂ පා text ය ජනනය කිරීම සඳහා ඔබ System.Net.Mime.ContentDisposition භාවිතා කළ යුතුය - එමඟින් අවකාශය ආදිය අඩංගු ගොනු නාම සමඟ නිවැරදිව කටයුතු කරනු ඇත.
රූප්

12

මෙම පුස්තකාලය භාවිතයෙන් ඔබට මනාව හැඩගස්වන ලද එක්සෙල් ගොනු සෑදිය හැකිය: http://officehelper.codeplex.com/documentation
පහත නියැදිය බලන්න:

using (ExcelHelper helper = new ExcelHelper(TEMPLATE_FILE_NAME, GENERATED_FILE_NAME))
{
    helper.Direction = ExcelHelper.DirectionType.TOP_TO_DOWN;
    helper.CurrentSheetName = "Sheet1";
    helper.CurrentPosition = new CellRef("C3");

    //the template xlsx should contains the named range "header"; use the command "insert"/"name".
    helper.InsertRange("header");

    //the template xlsx should contains the named range "sample1";
    //inside this range you should have cells with these values:
    //<name> , <value> and <comment>, which will be replaced by the values from the getSample()
    CellRangeTemplate sample1 = helper.CreateCellRangeTemplate("sample1", new List<string> {"name", "value", "comment"}); 
    helper.InsertRange(sample1, getSample());

    //you could use here other named ranges to insert new cells and call InsertRange as many times you want, 
    //it will be copied one after another;
    //even you can change direction or the current cell/sheet before you insert

    //typically you put all your "template ranges" (the names) on the same sheet and then you just delete it
    helper.DeleteSheet("Sheet3");
}        

නියැදිය මේ ආකාරයට පෙනේ:

private IEnumerable<List<object>> getSample()
{
    var random = new Random();

    for (int loop = 0; loop < 3000; loop++)
    {
        yield return new List<object> {"test", DateTime.Now.AddDays(random.NextDouble()*100 - 50), loop};
    }
}

11

C # වෙතින් එක්සෙල් ගොනුවක් සෑදීමට ඇති සරලම හා වේගවත්ම ක්‍රමය වන්නේ විවෘත XML Produc ලදායිතා මෙවලම භාවිතා කිරීමයි. විවෘත XML tivity ලදායිතා මෙවලම විවෘත XML SDK ස්ථාපනය සමඟ පැමිණේ. මෙවලම ඕනෑම එක්සෙල් ගොනුවක් සී # කේතයට හරවයි. C # කේතය පසුව එම ගොනුව නැවත උත්පාදනය කිරීමට භාවිතා කළ හැකිය.

සම්බන්ධ ක්‍රියාවලිය පිළිබඳ දළ විශ්ලේෂණයක් නම්:

  1. මෙවලම සමඟ විවෘත XML SDK ස්ථාපනය කරන්න.
  2. අපේක්ෂිත පෙනුමෙන් නවතම එක්සෙල් සේවාදායකයා භාවිතා කරමින් එක්සෙල් ගොනුවක් සාදන්න. එය නම් කරන්න DesiredLook.xlsx.
  3. මෙවලම විවෘත DesiredLook.xlsxකර ඉහළින් ඇති පරාවර්තන කේත බොත්තම ක්ලික් කරන්න. රූප විස්තරය මෙහි ඇතුළත් කරන්න
  4. ඔබගේ ගොනුව සඳහා C # කේතය මෙවලමෙහි දකුණු කවුළුව තුළ ජනනය වේ. මෙය ඔබේ C # විසඳුමට එකතු කර අපේක්ෂිත පෙනුමෙන් ගොනු ජනනය කරන්න.

ප්‍රසාද දීමනාවක් ලෙස, මෙම ක්‍රමය ඕනෑම වර්ඩ් සහ පවර්පොයින්ට් ගොනු සඳහා ක්‍රියා කරයි. C # සංවර්ධකයා ලෙස, ඔබ ඔබේ අවශ්‍යතාවන්ට සරිලන පරිදි කේතයේ වෙනස්කම් සිදු කරනු ඇත.

මම ගිතබ් මත සරල WPF යෙදුමක් නිර්මාණය කර ඇති අතර එය වින්ඩෝස් මත ක්‍රියාත්මක වේ. GeneratedClassඔබට ජනනය කළ කේතය ඇලවිය හැකි ස්ථාන දරණ පන්තියක් ඇත. ඔබ ගොනුවේ එක් අනුවාදයක් ආපසු ගියහොත්, එය මෙවැනි එක්සෙල් ගොනුවක් ජනනය කරනු ඇත:

රූප විස්තරය මෙහි ඇතුළත් කරන්න


1
මම තවමත් මෙම විවෘත XML SDK විසඳුම අත්හදා බලා නැත, නමුත් වාව්, මම එය අනිවාර්යයෙන්ම පරීක්ෂා කර බලමි. මම අවුරුදු ගණනාවක් තිස්සේ මේ වගේ මෙවලම් සමඟ වැඩ කර ඇති අතර මේ ගැන දැන සිටියේ නැත. .NET සමඟ XLSX වෙත ලිපිගොනු පරිවර්තනය කිරීම සඳහා මම මගේම සරල FOSS ප්‍රකාශයට පත් කර ඇත්තෙමි: github.com/TonyGravagno/NebulaXConvert
ටෝනිජී


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.