c# ২০১০ এমএস অফিস ইনস্টল না করে সি#এ এক্সেল(.এক্সএলএস এবং.এক্সএলএক্সএক্স) ফাইলটি কিভাবে তৈরি করবেন?




কম্পিউটার অফিস অ্যাপ্লিকেশন বই pdf (24)

কিভাবে কোডটি চলছে এমন মেশিনে এক্সেল ইনস্টল করা ছাড়াই আমি C # দিয়ে একটি এক্সেল স্প্রেডশীট তৈরি করতে পারি?


আপনি এই লাইব্রেরি ব্যবহার করে সুন্দরভাবে বিন্যাসিত এক্সেল ফাইলগুলি তৈরি করতে পারেন: 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};
    }
}

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);
            }
        }
    }
}

হাই এই সমাধান আপনার এক্সেল ফাইল আপনার গ্রিড ভিউ এক্সপোর্ট করা হয় এটি আপনাকে সাহায্য করতে পারে


আপনার তৃতীয় পক্ষের সমাধানটিতে সরাসরি একটি রেফারেন্স যুক্ত করতে চান যা সরাসরি আপনার সমস্যার সমাধান করে: http://www.officewriter.com

(দাবী পরিত্যাগ: আমি সফটআউটিস্যান্সের জন্য কাজ করি, যে অফিসটি OfficeWriter তৈরি করে)


আপনি GemBox.Spreadsheet এ একটি চেহারা নিতে চাইতে পারেন।

তাদের সমস্ত বৈশিষ্ট্যগুলির সাথে তাদের একটি মুক্ত সংস্করণ রয়েছে তবে এটি প্রতি শিটে 150 সারি এবং ওয়ার্কবুক প্রতি 5 টি শীট সীমিত, যদি এটি আপনার প্রয়োজনগুলির মধ্যে পড়ে।

আমি এখনও এটি ব্যবহার করার প্রয়োজন ছিল না, কিন্তু আকর্ষণীয় দেখায়।


IKVM + POI

অথবা, আপনি ইন্টারপ ব্যবহার করতে পারেন ...


এখানে একটি সম্পূর্ণ বিনামূল্যে C # লাইব্রেরি যা আপনাকে একটি DataSet , DataSet বা List<> থেকে জেনুইন এক্সেল 2007 .xlsx ফাইলে এক্সপক্সএক্স লাইব্রেরি ব্যবহার করে রপ্তানি করতে দেয়:

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

সম্পূর্ণ উত্স কোড প্রদান করা হয় - বিনামূল্যে - নির্দেশাবলী সহ, এবং একটি ডেমো অ্যাপ্লিকেশন।

আপনার অ্যাপ্লিকেশনটিতে এই ক্লাসটি যোগ করার পরে, আপনি কোডের এক লাইনের মধ্যে আপনার ডেটা সেটটি এক্সেলে রপ্তানি করতে পারেন:

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

এটা যে চেয়ে অনেক সহজ না ...

এবং এটি এমনকি আপনার সার্ভারে এক্সেল উপস্থিত হতে হবে না।


এক্সেল ফাইল তৈরি কিভাবে নমুনা দেখুন।

C # এবং VB.NET এ উদাহরণ আছে

এটি এক্সএসএল এক্সএসএলএক্স এবং সিএসভি এক্সেল ফাইল পরিচালনা করে।

http://www.devtriogroup.com/ExcelJetcell/Samples


ইনফ্র্যাগজিস্টিকস বা সিঙ্কফিউশন মত কিছু তৃতীয় পক্ষের কম্পোনেন্ট বিক্রেতারা খুব ভাল এক্সেল এক্সপোর্ট ক্ষমতা সরবরাহ করে যা মাইক্রোসফট এক্সেল ইনস্টল করার প্রয়োজন হয় না।

যেহেতু এই বিক্রেতারাও উন্নত UI গ্রিড উপাদানগুলি সরবরাহ করে, তাই আপনি যদি আপনার এক্সেলের ব্যবহারকারীর ইন্টারফেসের গ্রিডের বর্তমান অবস্থা অনুকরণ করতে এক্সেল এক্সপোর্টের স্টাইল এবং লেআউটটি চান তবে এই উপাদানটি বিশেষভাবে কার্যকর।

যদি আপনার রপ্তানিটি এক্সপোর্ট করা ডেটাতে জোর দিয়ে সার্ভারের পাশে চালানো হয় এবং UI এ কোনও লিঙ্ক না থাকে তবে আমি মুক্ত ওপেন সোর্স বিকল্পগুলির একটি (যেমন এক্সেল ল্যাবরেটরি) যেতে চাই।

আমি পূর্বে মাইক্রোসফ্ট অফিস স্যুট সার্ভার পার্শ্ব অটোমেশন ব্যবহার করার প্রচেষ্টা করার জন্য প্রকল্প সঙ্গে জড়িত হয়েছে। এই অভিজ্ঞতা উপর ভিত্তি করে আমি দৃঢ়ভাবে যে পদ্ধতির বিরুদ্ধে সুপারিশ করবে।


যদি আপনি Excel 2007/2010 ফাইল তৈরি করেন তবে এই ওপেন সোর্স প্রকল্পটি চেষ্টা করুন: https://github.com/closedxml/closedxml

এটি এক্সএমএল ডকুমেন্টগুলির ঝগড়াগুলি মোকাবেলা করে ফাইলগুলি (ভিবিএর অনুরূপ) ম্যানিপুলেশন করার জন্য একটি বস্তু ভিত্তিক উপায় সরবরাহ করে। এটি কোনও .NET ভাষা যেমন সি # এবং ভিসুয়াল বেসিক (ভিবি) দ্বারা ব্যবহার করা যেতে পারে।

ClosedXML আপনাকে এক্সেল অ্যাপ্লিকেশন ছাড়াই এক্সেল 2007/2010 ফাইল তৈরি করতে দেয়। সাধারণ উদাহরণ একটি ওয়েব সার্ভারে এক্সেল প্রতিবেদনগুলি তৈরি করছে:

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

আপনি xlsx বিন্যাসে খুশি হলে, আমার কোডপ্লেক্স GitHub প্রকল্পটি চেষ্টা করুন। EPPlus । ExcelPackage থেকে উত্স দিয়ে এটি শুরু করে, কিন্তু আজ এটি একটি সম্পূর্ণ পুনর্লিখন। রেঞ্জ, সেল স্টাইলিং, চার্ট, আকার, ছবি, নামমুদ্রা, autofilter এবং অন্যান্য স্টাফ সমর্থন করে।


আমি সম্প্রতি FlexCel.NET ব্যবহার FlexCel.NET এবং এটি একটি চমৎকার লাইব্রেরি হতে পাওয়া! আমি যে অনেক সফটওয়্যার পণ্য সম্পর্কে না বলে। এখানে সম্পূর্ণ বিক্রয় পিচ প্রদান কোন পয়েন্ট, আপনি তাদের ওয়েবসাইটে সব বৈশিষ্ট্য পড়তে পারেন।

এটি একটি বাণিজ্যিক পণ্য, তবে আপনি এটি কিনলে সম্পূর্ণ উৎস পাবেন। তাই আমি মনে করি আপনি যদি সত্যিই চান তবে আপনার সমাবেশে এটি সংকলন করতে পারেন। অন্যথা এটি xcopy- এ কোনও কনফিগারেশন বা ইনস্টলেশান বা এরকম কোনও অতিরিক্ত সমাবেশ নয়।

আমি মনে করি না যে আপনি তৃতীয় পক্ষের লাইব্রেরিগুলির মতো .NET ফ্রেমওয়ার্ক হিসাবে এটি করার কোনও উপায় খুঁজে পাবেন, সম্ভবত এটির জন্য এটি সমর্থন করে নি এবং এটি OLE অটোমেশন শুধুমাত্র ব্যথার পুরো পৃথিবী।



আমি সাফল্যের সঙ্গে নিম্নলিখিত খোলা উৎস প্রকল্প ব্যবহার করেছি:

  • OOXML ফর্ম্যাটের জন্য এক্সেল প্যাকেজ (অফিস 2007)

  • এক্সপিএস ফরম্যাটের জন্য এনপিওআই (অফিস 2003)। এনপিওআই 2.0 (আলফা) XLSX সমর্থন করে।

আমার ব্লগে পোস্ট দেখুন:

এক্স স্প্রেডশীট তৈরি করা। এক্স # এবং এক্সএক্সএক্স এক্স #

এক্সেল টেবিল এবং গতিশীল চার্ট সঙ্গে এনপিওআই


সি # থেকে এক্সেল ফাইল তৈরি করার সবচেয়ে সরল এবং দ্রুততম উপায় হল ওপেন এক্সএমএল প্রোডাক্টিভিটি টুলটি ব্যবহার করা। ওপেন এক্সএমএল প্রোডাক্টিভিটি টুলটি ওপেন এক্সএমএল এসডিকে ইনস্টলেশনের সাথে আসে। টুল বিপরীত প্রকৌশলীরা যেকোন এক্সেল ফাইল সি # কোডে। সি # কোডটি তখন সেই ফাইলটি পুনরায় জেনারেট করতে ব্যবহার করা যেতে পারে।

জড়িত প্রক্রিয়ার একটি সংক্ষিপ্ত বিবরণ হল:

  1. টুল দিয়ে ওপেন এক্সএমএল এসডিকে ইনস্টল করুন।
  2. পছন্দসই চেহারা সঙ্গে সর্বশেষ এক্সেল ক্লায়েন্ট ব্যবহার করে একটি এক্সেল ফাইল তৈরি করুন। এটা DesiredLook.xlsx নাম।
  3. টুলটি DesiredLook.xlsx খুলুন এবং উপরের কাছাকাছি DesiredLook.xlsx কোড বাটনে ক্লিক করুন।
  4. আপনার ফাইলের C # কোডটি টুলটির ডান অংশে তৈরি হবে। আপনার সি # সমাধান এ যোগ করুন এবং যে পছন্দসই চেহারা সঙ্গে ফাইল জেনারেট করুন।

বোনাস হিসাবে, এই পদ্ধতিটি কোনও ওয়ার্ড এবং পাওয়ারপয়েন্ট ফাইলগুলির জন্য কাজ করে। সি # বিকাশকারী হিসাবে, আপনি আপনার প্রয়োজন অনুসারে কোডে পরিবর্তনগুলি করবেন।

আমি জিথব এ একটি সহজ WPF অ্যাপ তৈরি করেছি যা এই উদ্দেশ্যে উইন্ডোজ চালাবে। GeneratedClass নামে একটি স্থানধারক ক্লাস রয়েছে যেখানে আপনি GeneratedClass কোডটি আটকান করতে পারেন। যদি আপনি ফাইলটির একটি সংস্করণ ফিরে যান, এটি এটির মতো একটি এক্সেল ফাইল তৈরি করবে:


বিভিন্ন অফিস 2003 এক্সএমএল লাইব্রেরি ছোট excel ফাইলের জন্য বেশ ভাল কাজ। যাইহোক, আমি এক্সএমএল ফর্ম্যাটে সংরক্ষিত একটি বড় ওয়ার্কবুকের নিবিড় আকার একটি সমস্যা খুঁজে পাই। উদাহরণস্বরূপ, আমি যে কাজপুস্তিকাটি দিয়ে কাজ করি তা নতুনতে 40MB হবে (এবং স্বীকার্যক্রমে আরো শক্তভাবে প্যাক করা) এক্সএলএসএক্স ফর্ম্যাট 360 মিমি এক্সএমএল ফাইল হয়ে যায়।

যতদূর আমার গবেষণায় আমাকে নিয়ে যাওয়া হয়েছে, সেখানে দুটি বাণিজ্যিক প্যাকেজ রয়েছে যা আউটপুটকে পুরোনো বাইনারি ফাইল ফরম্যাটগুলিতে অনুমতি দেয়। তারা:

উভয় সস্তা (500USD এবং 800USD যথাক্রমে, আমি মনে করি)। কিন্তু উভয় এক্সেল নিজেই স্বাধীন কাজ।

OpenOffice.org এর পছন্দগুলির জন্য আমি এক্সেল আউটপুট মডিউলটি সম্পর্কে আগ্রহী হব। আমি জাভা থেকে .NET এ পোর্ট করা যেতে পারে, যদি আমি আশ্চর্য।


আমি কয়েকটি বিকল্প ব্যবহার করেছি:

যদি এক্সএলএসএক্সটি অবশ্যই আবশ্যক: ExcelPackage একটি ভাল শুরু তবে বিকাশকারী এটির কাজ বন্ধ করার সময় মারা যান। EXML সেখানে থেকে বাছাই এবং কয়েক বৈশিষ্ট্য যোগ করা। ExML একটি খারাপ বিকল্প নয়, আমি এখনও এটি কয়েকটি উত্পাদন ওয়েবসাইটগুলিতে ব্যবহার করছি।

আমার নতুন প্রকল্পগুলির জন্য, যদিও, আমি এনপিওআই , poi.apache.org এর .NET পোর্ট ব্যবহার করছি। এনপিওআই 2.0 (আলফা) XLSX সমর্থন করে।


আমি এক্সএমএল স্প্রেডশীট জেনারেট করার ব্যাপারে একমত, এখানে C # 3 এর জন্য এটি কীভাবে করা যায় (প্রত্যেকেরই কেবল এটি VB 9: P এর মধ্যে ব্লগগুলি রয়েছে) http://www.aaron-powell.com/linq-to-xml-to-excel



বাণিজ্যিক সমাধান, .NET এর জন্য SpreadsheetGear এটি করবে।

আপনি এখানে লাইভ ASP.NET (C # এবং VB) নমুনা দেখতে এবং here একটি মূল্যায়ন সংস্করণ ডাউনলোড করতে পারেন।

Disclaimer: আমি SpreadsheetGear এলএলসি মালিক


আপনি ExcelXmlWriter ব্যবহার করতে পারেন।

এটা জরিমানা কাজ করে।


আপনি এক্সেল ফাইল তৈরি এবং ম্যানিপুলেট করার জন্য OLEDB ব্যবহার করতে পারেন। এটি পরীক্ষা করে দেখুন: OLEDB ব্যবহার করে Excel পড়া এবং লেখার

আদর্শ উদাহরণ:

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();
}

সম্পাদনা করুন - আরও কিছু লিঙ্ক:


LINQ এ এক্সএমএল এর সাথে এটি করার একটি উপায় এখানে নমুনা কোড দিয়ে সম্পূর্ণ করা হয়েছে:

LINQ এর সাথে XML এ দ্রুত এক্সপোর্ট এবং এক্সেল ডেটা রপ্তানি করুন

এটি একটু জটিল, যেহেতু আপনাকে নামস্থানগুলি আমদানি করতে হবে এবং তাই ঘোষণা করতে হবে, তবে এটি আপনাকে বহিরাগত নির্ভরতাগুলি এড়াতে দেয়।

(অবশ্যই, এটি VB .NET নয়, C # নয়, তবে আপনি XML লিটারালগুলি ব্যবহার করতে নিজের প্রোজেক্টে VB .NET স্টাফগুলি আলাদা করতে পারেন এবং C # এ অন্য সব কিছু করতে পারেন।)


আপনি কি কখনও sylk চেষ্টা করেছি?

আমরা ক্লাসিক এএসপি সিলেক হিসাবে এক্সেলশীট জেনারেট করতে ব্যবহার করেছিলাম এবং এখনই আমরা একটি এক্সেলজেনারটার অনুসন্ধান করছি।

Sylk জন্য সুবিধা হয়, আপনি কোষ বিন্যাস করতে পারেন।


আপনি ExcelLibrary নামে একটি লাইব্রেরি ব্যবহার করতে পারেন। এটি গুগল কোডে পোস্ট করা একটি মুক্ত, ওপেন সোর্স লাইব্রেরি:

ExcelLibrary

এটি উপরে উল্লেখিত পিএইচপি এক্সেলওয়াইডারের একটি পোর্ট হতে দেখায়। এটি এখনও নতুন .xlsx ফর্ম্যাটে লিখবে না, তবে তারা সেই কার্যকারিতা যোগ করার জন্য কাজ করছে।

এটা খুব সহজ, ছোট এবং ব্যবহার করা সহজ। প্লাস এটি একটি ডেটাSetHelper যা আপনাকে সহজেই এক্সেল ডেটাতে কাজ করার জন্য ডেটাসেট এবং ডেটাবেবেলগুলি ব্যবহার করতে দেয়।

এক্সেল লাইব্রেরি এখনও পুরোনো এক্সেল ফর্ম্যাট (.xls ফাইল) জন্য কাজ করে বলে মনে হচ্ছে, তবে নতুন 2007/2010 ফর্ম্যাটের জন্য ভবিষ্যতে সহায়তা যোগ করা হতে পারে।

আপনি EPPlus ব্যবহার করতে পারেন, যা শুধুমাত্র এক্সেল 2007/2010 বিন্যাস ফাইল (.xlsx ফাইল) জন্য কাজ করে।

মতামত হিসাবে উল্লেখ প্রতিটি লাইব্রেরি সঙ্গে কয়েক পরিচিত বাগ আছে। সব সময়, EPPlus সময় যায় হিসাবে ভাল পছন্দ বলে মনে হচ্ছে। এটি আরও সক্রিয়ভাবে আপডেট এবং নথিভুক্ত করা বলে মনে হচ্ছে।

এছাড়াও, নীচের @ অ্যারটিমমেটিয়ারোনভ দ্বারা উল্লেখ করা হয়েছে, ইপপ্লাসের পিভট টেবিলগুলির জন্য সমর্থন রয়েছে এবং এক্সেল লাইব্রেরির কিছু সহায়তা থাকতে পারে ( এক্সেল লাইব্রেরিতে পিভট টেবিল সমস্যা )

এখানে দ্রুত রেফারেন্স জন্য একটি দম্পতি লিঙ্ক আছে:
ExcelLibrary - জিএনইউ লেসার জিপিএল
EPPlus - জিএনইউ লেসার জেনারেল পাবলিক লাইসেন্স (এলজিপিএল)

এখানে ExcelLibrary এর জন্য কিছু উদাহরণ কোড:

এখানে একটি ডেটাবেস থেকে ডেটা গ্রহণ এবং এটি থেকে একটি কর্মপরিসর তৈরি একটি উদাহরণ। দ্রষ্টব্য যে 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);

এক্সেল ফাইল তৈরি করা যে হিসাবে সহজ। আপনি নিজেও এক্সেল ফাইল তৈরি করতে পারেন, তবে উপরের কার্যকারিতাটি আমাকে সত্যিই প্রভাবিত করেছে।







file-io