এএসপি.নেটে একটি এক্সেল ফাইল তৈরি করা [বন্ধ]


99

আমি একটি এএসপি.এনইটি অ্যাপে (ভিবি.এনইটি কোডবিহাইন্ড) একটি বিভাগ যুক্ত করতে চলেছি যা কোনও ব্যবহারকারীকে তাদের এক্সেল ফাইল হিসাবে ডেটা ফিরিয়ে আনতে দেবে, যা আমি ডাটাবেসের ডেটার ভিত্তিতে তৈরি করব। এটি করার বিভিন্ন উপায় থাকলেও প্রত্যেকের নিজস্ব ত্রুটি রয়েছে। কীভাবে আপনি ডেটা ফিরিয়ে? আমি এমন কিছু সন্ধান করছি যা যথাসম্ভব পরিষ্কার এবং সহজবোধ্য।


উত্তর:


131

সিএসভি

পেশাদাররা:

  • সরল

কনস:

  • এটি অন্য লোকেলে বা বিভিন্ন এক্সেল কনফিগারেশনে (যেমন তালিকার বিভাজক) কাজ করতে পারে না
  • বিন্যাস, সূত্র ইত্যাদি প্রয়োগ করতে পারে না

এইচটিএমএল

পেশাদাররা:

  • এখনও বেশ সহজ
  • সাধারণ গঠন এবং সূত্র সমর্থন করে

কনস:

  • আপনাকে ফাইলটির নাম xls হিসাবে রাখতে হবে এবং এক্সেল আপনাকে নন নেটিভ এক্সেল ফাইল খোলার বিষয়ে সতর্ক করতে পারে
  • ওয়ার্কবুকের জন্য একটি ওয়ার্কশিট

ওপেনএক্সএমএল (অফিস 2007। এক্সএলএসএক্স)

পেশাদাররা:

  • নেটিভ এক্সেল ফর্ম্যাট
  • সমস্ত এক্সেল বৈশিষ্ট্য সমর্থন করে
  • না প্রয়োজন, এক্সেল একজন কপি ইনস্টল
  • পিভট সারণী তৈরি করতে পারে
  • ওপেন সোর্স প্রকল্প ইপিপ্লাস ব্যবহার করে উত্পন্ন করা যেতে পারে

কনস:

  • এক্সেল 2007 এর বাইরে সীমিত সামঞ্জস্যতা (আজকাল কোনও সমস্যা হওয়া উচিত নয়)
  • জটিল আপনি যদি না কোনও তৃতীয় পক্ষের উপাদান ব্যবহার করেন

স্প্রেডশিট এমএমএল (ওপেন ফর্ম্যাট এক্সএমএল)

পেশাদাররা:

  • নেটিভ এক্সেল ফর্ম্যাটগুলির সাথে তুলনা করা সহজ
  • সর্বাধিক এক্সেল বৈশিষ্ট্য সমর্থন করে: বিন্যাস, শৈলী, সূত্র, প্রতি বুক প্রতি একাধিক পত্রক
  • এটি ব্যবহারের জন্য এক্সেল ইনস্টল করার দরকার নেই
  • কোনও তৃতীয় পক্ষের লাইব্রেরি প্রয়োজন নেই - কেবল আপনার এক্সএমএল লিখুন
  • ডকুমেন্টস এক্সেল এক্সপি / 2003/2007 দ্বারা খোলা যেতে পারে

কনস:

  • ভাল ডকুমেন্টেশন অভাব
  • এক্সেলের পুরানো সংস্করণগুলিতে সমর্থিত নয় (প্রাক-2000)
  • কেবল লিখুন, এতে একবার আপনি এটি খুলুন এবং এক্সেল থেকে পরিবর্তনগুলি এটিকে নেটিভ এক্সেলে রূপান্তরিত করুন।

এক্সএলএস (তৃতীয় পক্ষের উপাদান দ্বারা উত্পাদিত)

পেশাদাররা:

  • সমস্ত ফর্ম্যাটিং, সূত্র ইত্যাদি দিয়ে নেটিভ এক্সেল ফাইল তৈরি করুন Gene

কনস:

  • ব্যয় টাকা
  • নির্ভরতা যুক্ত করুন

সিওএম ইন্টারপ

পেশাদাররা:

  • নেটিভ মাইক্রোসফ্ট লাইব্রেরি ব্যবহার করে
  • নেটিভ ডকুমেন্টগুলির জন্য সমর্থন পড়ুন

কনস:

  • খুব ধীর
  • নির্ভরতা / সংস্করণ মেলা সমস্যা
  • পড়ার সময় ওয়েব ব্যবহারের জন্য সংমেয় / ডেটা অখণ্ডতার বিষয় issues
  • খুব ধীর
  • ওয়েব ব্যবহারের জন্য স্কেলিং ইস্যুগুলির (সম্মতি থেকে পৃথক): সার্ভারে ভারী এক্সেল অ্যাপ্লিকেশানের অনেকগুলি উদাহরণ তৈরি করা দরকার
  • উইন্ডোজ প্রয়োজন
  • আমি কি উল্লেখ করেছি যে এটি ধীর?

4
স্প্রেডশিট এমএমএলের জন্য উল্লিখিত "লিখন-কেবল" সীমাবদ্ধতা সম্পূর্ণরূপে কোনও সমস্যা নয়, যেহেতু আপনি যদি চান তবে আপনি স্প্রেডশিট এমএমএল হিসাবে একটি এক্সেল ফাইল সংরক্ষণ করতে পারেন।
ব্রায়ান

4
আপনি যদি এটির সাথে বড় বড় ফাইল তৈরি করেন তবে স্প্রেডশিটএমএল এক্সেল 2003 কে ক্রাশ করতে পারে। এটি বিশ্বাস করবেন না: /
ব্রায়ান

4
আপনি অফিস 2002 এবং 2003 এ ঠিক একটি স্প্রেডশিট এমএমএল ফাইলে সংরক্ষণ করতে পারেন required প্রয়োজনীয় হিসাবে সংরক্ষণ করুন। স্প্রেডশিটএমএল অফিস 2007 এর নতুন বৈশিষ্ট্যগুলি (উদাহরণস্বরূপ, 3 টিরও বেশি শর্তসাপেক্ষ ফর্ম্যাট) সহ ম্যাক্রো, চার্ট, গ্রাফিক্স এবং আরও কয়েকটি প্রতিকূলতা এবং শেষগুলি সঞ্চয় করতে পারে না। এক্সএমএল যেহেতু ভার্বোজ, তাই সার্ভার থেকে প্রেরণের আগে স্প্রেডশিট এমএমএল জিপ করা (শার্পজাইপলিব ব্যবহার করা একটি বিকল্প) ডাউনলোডের সময় হ্রাস করতে দুর্দান্ত কাজ করে - আসলে, এটি উল্লেখ করা উচিত যে ওপেনএক্সএমএল যেভাবেই কোনও জিপ ধারকটিতে সঞ্চিত রয়েছে। @ ব্রায়ান: আমি ক্রাশ সমস্যা ছাড়াই দৈনিক 50-100MB পরিসরে জটিল স্প্রেডশিট এমএমএল ব্যবহার করি।
সমৃদ্ধশালী

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

4
@ পোমার্ক: এটি সোজা হতে পারে তবে এটি পরিষ্কার নয়। ব্যবহারকারী একটি এক্সেল ফাইল চান এবং আপনি তাকে একটি জাল এক্সটেনশান সহ একটি এইচটিএমএল ফাইল উপহার দিন।
হেইনজি

39

আপনি এইচটিএমএল টেবিল কোষ হিসাবে ডেটা আউটপুট করতে পারেন, এটিতে একটি .xlsবা .xlsxএক্সটেনশান আটকে রাখতে পারেন এবং এক্সেল এটিকে এমনভাবে খুলবে যেন এটি কোনও স্থানীয় দলিল। এমনকি আপনি কিছু সীমিত ফর্ম্যাটিং এবং সূত্র গণনাও এইভাবে করতে পারেন, সুতরাং এটি সিএসভির চেয়ে অনেক বেশি শক্তিশালী। এছাড়াও, একটি এইচটিএমএল টেবিল আউটপুট করা এএসপি.নেট এর মতো ওয়েব প্ল্যাটফর্ম থেকে করা খুব সহজ হওয়া উচিত)

আপনার এক্সেল ওয়ার্কবুকের মধ্যে যদি আপনার একাধিক ওয়ার্কশিট বা নামযুক্ত ওয়ার্কশিটগুলির প্রয়োজন হয় তবে আপনি এক্সএমএল স্কিমার নামে অনুরূপ কিছু করতে পারেন SpreadSheetML। এটি Office 2007 এর সাথে প্রেরণ করা নতুন ফর্ম্যাট নয় , তবে সম্পূর্ণ আলাদা কিছু যা এক্সেল 2000 এর মতো কাজ করে it এটি কীভাবে কাজ করে তা বোঝানোর সহজতম উপায় উদাহরণ সহ:

<?xml version="1.0"?>
<?mso-application progid="Excel.Sheet"?> 
<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"
        xmlns:o="urn:schemas-microsoft-com:office:office"
        xmlns:x="urn:schemas-microsoft-com:office:excel"
        xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"
        xmlns:html="http://www.w3.org/TR/REC-html40">
<DocumentProperties xmlns="urn:schemas-microsoft-com:office:office">
      <Author>Your_name_here</Author>
      <LastAuthor>Your_name_here</LastAuthor>
      <Created>20080625</Created>
      <Company>ABC Inc</Company>
      <Version>10.2625</Version>
</DocumentProperties>
<ExcelWorkbook xmlns="urn:schemas-microsoft-com:office:excel">
        <WindowHeight>6135</WindowHeight>
        <WindowWidth>8445</WindowWidth>
        <WindowTopX>240</WindowTopX>
        <WindowTopY>120</WindowTopY>
        <ProtectStructure>False</ProtectStructure>
        <ProtectWindows>False</ProtectWindows>
</ExcelWorkbook>

<Styles>
      <Style ss:ID="Default" ss:Name="Normal">
            <Alignment ss:Vertical="Bottom" />
            <Borders />
            <Font />
            <Interior />
            <NumberFormat />
            <Protection />
      </Style>
</Styles>

<Worksheet ss:Name="Sample Sheet 1">
<Table ss:ExpandedColumnCount="2" x:FullColumns="1" x:FullRows="1" ID="Table1">
<Column ss:Width="150" />
<Column ss:Width="200" />
<Row>
      <Cell><Data ss:Type="Number">1</Data></Cell>
      <Cell><Data ss:Type="Number">2</Data></Cell>
</Row>
<Row>
      <Cell><Data ss:Type="Number">3</Data></Cell>
      <Cell><Data ss:Type="Number">4</Data></Cell>
</Row>
<Row>
      <Cell><Data ss:Type="Number">5</Data></Cell>
      <Cell><Data ss:Type="Number">6</Data></Cell>
</Row>
<Row>
      <Cell><Data ss:Type="Number">7</Data></Cell>
      <Cell><Data ss:Type="Number">8</Data></Cell>
</Row>
</Table>
</Worksheet>

<Worksheet ss:Name="Sample Sheet 2">
<Table ss:ExpandedColumnCount="2" x:FullColumns="1" x:FullRows="1" ID="Table2">
<Column ss:Width="150" />
<Column ss:Width="200" />
<Row>
      <Cell><Data ss:Type="String">A</Data></Cell>
      <Cell><Data ss:Type="String">B</Data></Cell>
</Row>
<Row>
      <Cell><Data ss:Type="String">C</Data></Cell>
      <Cell><Data ss:Type="String">D</Data></Cell>
</Row>
<Row>
      <Cell><Data ss:Type="String">E</Data></Cell>
      <Cell><Data ss:Type="String">F</Data></Cell>
</Row>
<Row>
      <Cell><Data ss:Type="String">G</Data></Cell>
      <Cell><Data ss:Type="String">H</Data></Cell>
</Row>
</Table>
</Worksheet>
</Workbook> 

12
আপনি একটি xx এক্সটেনসিয়ো দিয়ে ফাইলটির নাম পরিবর্তন করতে পারেন এবং এটি যুক্ত করতে পারেন: <? xso সংস্করণ = "1.0"?> এর ঠিক পরে উইন্ডোজ এই ফাইলটি বুঝতে পারে যে এই ফাইলটি একটি এক্সেল ফাইল, এটি সঠিক আইকনটি দেবে, আপনি যখন ফাইলটি ক্লিক করেন তখন এক্সেলটি খুলবে এবং এক্সেল অভিযোগ করবে না যে ফাইলের ফর্ম্যাট এবং বিষয়বস্তু মেলে না। বিদায়
পোমার্ক

4
@pomarc এর খারাপ দিকটি হ'ল অন্যান্য প্রোগ্রামগুলি যে এক্সেল ফাইলগুলি আমদানি করে তা এটি চিনতে পারে না। তবে তারপরে, তারা সম্ভবত কোনওভাবেই এক্সএমএলকে বিশ্লেষণ করবে না।
জোয়েল কোহোর্ন

4
আমি এই কৌশলটি বেশ সফলভাবে ব্যবহার করেছি। এটি আমার প্রস্তাবনা - ময়লা সহজ এবং খুব কার্যকর।
নিলবি

এক্সএলএস ফাইল হিসাবে মুখোশযুক্ত এইচটিএমএল টেবুলার ডেটা সহ দুটি সম্ভাব্য সমস্যা (ওয়াইএমএমভি): (1) মাইক্রোসফ্ট এক্সেল স্বয়ংক্রিয়ভাবে শীর্ষস্থান এবং শূন্যগুলি ছাঁটাইবে; এবং (2) মাইক্রোসফ্ট এক্সেল 2010 এইচটিএমএল ট্যাবুলার ডেটাযুক্ত একটি এক্সএলএস ফাইল খোলার সময় ব্যবহারকারীকে সতর্ক করে। # 1 এর সমাধানটি ক্রিয়েটিভস্ট / ডক / আর্টিকেলস / সিএসভি / সিএসভি01.htm#CSVAndExcel বলে মনে হচ্ছে (যদি শীর্ষস্থান / শূন্যগুলি উল্লেখযোগ্য হয় এবং এটি ধরে রাখা দরকার)।
আইকোভিন্স

কেবলমাত্র স্পষ্টতার জন্য, যখন আমি এইচটিএমএল টেবিলগুলি উল্লেখ করেছি, এই উত্তরের মূল পয়েন্টটি স্প্রেডশিট এমএমএল, যা কেবলমাত্র এইচটিএমএল ট্যাবুলার ডেটার চেয়ে বেশি। এক্সেল এটিকে দেশীয় হিসাবে দেখে।
জোয়েল কোহর্ন 21

16

যদি কোনও ডেটা টেবিল থেকে আসে :

public static void DataTabletoXLS(DataTable DT, string fileName)
{
    HttpContext.Current.Response.Clear();
    HttpContext.Current.Response.Charset = "utf-16";
    HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.GetEncoding("windows-1250");
    HttpContext.Current.Response.AddHeader("content-disposition", string.Format("attachment; filename={0}.xls", fileName));
    HttpContext.Current.Response.ContentType = "application/ms-excel";

    string tab = "";
    foreach (DataColumn dc in DT.Columns)
    {
        HttpContext.Current.Response.Write(tab + dc.ColumnName.Replace("\n", "").Replace("\t", ""));
        tab = "\t";
    }
    HttpContext.Current.Response.Write("\n");

    int i;
    foreach (DataRow dr in DT.Rows)
    {
        tab = "";
        for (i = 0; i < DT.Columns.Count; i++)
        {
            HttpContext.Current.Response.Write(tab + dr[i].ToString().Replace("\n", "").Replace("\t", ""));
            tab = "\t";
        }
        HttpContext.Current.Response.Write("\n");
    }
    HttpContext.Current.Response.End();
}

গ্রিডভিউ থেকে :

public static void GridviewtoXLS(GridView gv, string fileName)
{
    int DirtyBit = 0;
    int PageSize = 0;
    if (gv.AllowPaging == true)
    {
        DirtyBit = 1;
        PageSize = gv.PageSize;
        gv.AllowPaging = false;
        gv.DataBind();
    }

    HttpContext.Current.Response.Clear();
    HttpContext.Current.Response.Charset = "utf-8";
    HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.GetEncoding("windows-1250");
    HttpContext.Current.Response.AddHeader(
        "content-disposition", string.Format("attachment; filename={0}.xls", fileName));
    HttpContext.Current.Response.ContentType = "application/ms-excel";

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

        //  include the gridline settings
        table.GridLines = gv.GridLines;

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

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

        //  add the footer row to the table
        if (gv.FooterRow != null)
        {
            Utilities.Export.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().Replace("£", ""));
        HttpContext.Current.Response.End();
    }

    if (DirtyBit == 1)
    {
        gv.PageSize = PageSize;
        gv.AllowPaging = true;
        gv.DataBind();
    }
}

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())
        {
            Utilities.Export.PrepareControlForExport(current);
        }
    }
}

4
ধন্যবাদ আমার দরকার কোডটি। :)
কেজেনসেন

স্কট, পাউন্ড ("£") সাইন দিয়ে কী আছে? আমার যদি এটি প্রয়োজন হয়? অন্য কোনও চরিত্র যা বিপজ্জনক?
পাইওটার ওউসিয়াক

পারফেক্ট। ঠিক যেটা আমার দরকার ছিল.
ব্র্যাড ব্রুস

£ চিহ্নটি আসলে আমার গ্রাহকের একজনের জন্য আমার প্রয়োজন মাত্র। আপনি এটি নিতে পারেন।
SpoiledTechie.com

এক্সএলএস ফাইল হিসাবে মুখোশযুক্ত এইচটিএমএল টেবুলার ডেটা সহ দুটি সম্ভাব্য সমস্যা (ওয়াইএমএমভি): (1) মাইক্রোসফ্ট এক্সেল স্বয়ংক্রিয়ভাবে শীর্ষস্থান এবং শূন্যগুলি ছাঁটাইবে; এবং (2) মাইক্রোসফ্ট এক্সেল 2010 এইচটিএমএল ট্যাবুলার ডেটাযুক্ত একটি এক্সএলএস ফাইল খোলার সময় ব্যবহারকারীকে সতর্ক করে। # 1 এর সমাধানটি ক্রিয়েটিভস্ট / ডক / আর্টিকেলস / সিএসভি / সিএসভি01.htm#CSVAndExcel বলে মনে হচ্ছে (যদি শীর্ষস্থান / শূন্যগুলি উল্লেখযোগ্য হয় এবং এটি ধরে রাখা দরকার)। মাইক্রোসফ্ট এক্সেলে খুললে সিএসভি ডেটা ফাইলগুলিও # 1 থেকে ক্ষতিগ্রস্থ হয়।
আইকোভিন্স

7

এটি স্প্রেডএমএল-এর চারপাশে একটি ফ্রি মোড়ক - এটি দুর্দান্ত কাজ করে।

http://www.carlosag.net/Tools/ExcelXMLWriter/


আমি এটিও ব্যবহার করেছি - দুর্দান্ত।
পল সুয়ার্ট

এই লাইব্রেরি xl পড়ার অনুমতি দেয়?
অ্যালেক্স 18

5

প্রদত্ত উত্তরের ভিত্তিতে এবং সহকর্মীদের সাথে পরামর্শের ভিত্তিতে, এটি প্রদর্শিত হয় যে সর্বোত্তম সমাধান হ'ল একটি এক্সএমএল ফাইল বা এইচটিএমএল টেবিল তৈরি করা এবং সংযুক্তি হিসাবে এটিকে নিচে চাপানো। আমার সহকর্মীদের দ্বারা প্রস্তাবিত একটি পরিবর্তন হ'ল ডেটা (যেমন এইচটিএমএল টেবিলগুলি) সরাসরি প্রতিক্রিয়া অবজেক্টে লেখা যেতে পারে, সুতরাং কোনও ফাইল লেখার প্রয়োজনীয়তা বাদ দেয় যা অনুমতি সমস্যার কারণে ঝামেলা হতে পারে, I / O বিতর্ক এবং নির্ধারিত শুদ্ধি ঘটে তা নিশ্চিত করা।

এখানে কোডটির একটি স্নিপেট রয়েছে ... আমি এটি এখনও পরীক্ষা করে দেখিনি, এবং আমি কলকৃত সমস্ত কোড সরবরাহ করি নি, তবে আমি মনে করি এটি ধারণাটিকে ভালভাবে উপস্থাপন করে।

    Dim uiTable As HtmlTable = GetUiTable(groupedSumData)

    Response.Clear()

    Response.ContentType = "application/vnd.ms-excel"
    Response.AddHeader("Content-Disposition", String.Format("inline; filename=OSSummery{0:ddmmssf}.xls", DateTime.Now))

    Dim writer As New System.IO.StringWriter()
    Dim htmlWriter As New HtmlTextWriter(writer)
    uiTable.RenderControl(htmlWriter)
    Response.Write(writer.ToString)

    Response.End()

4
ড্যান, আপনি সঠিক পথে আছেন এবং আমি স্পষ্টতই এইচটিএমএল-এর উপর স্প্রেডশীটএমএল-ভবিষ্যতের জন্য শ্বাসকষ্টের প্রস্তাব দিচ্ছি, যেহেতু এইচটিএমএল সমর্থন হতাশাজনকভাবে সীমাবদ্ধ। তবে এইচটিএমএল, স্প্রেডশিট এমএমএল এবং ওপেনএক্সএমএল দিয়ে ফাইলের আকারগুলি বৃহত্তর হতে পারে এবং সার্ভারের দ্বারা জিপিপ করা যাবে না। ওপেনএক্সএমএলটির ভিতরে একাধিক ফাইল সহ একটি জিপ ধারক প্রয়োজন এবং আপনি প্রথমে জিপ করে যদি সংযুক্তি হিসাবে জিপটি প্রেরণ করেন তবে স্প্রেডশীটএমএল এবং এইচটিএমএল উভয়ই ডাউনলোড করতে খুব দ্রুত। সরাসরি জবাব দেওয়ার চেয়ে শার্পজাইপলিব ব্যবহার করুন এবং এতে স্ট্রিম করুন।
সমৃদ্ধশালী

4

এক্সেল এইচটিএমএল বোঝে তাই আপনি কেবলমাত্র একটি এক্সএলএস এক্সটেনশন সহ কোনও টেম্পল ফাইলটিতে এইচটিএমএল টেবিল হিসাবে ডেটা লিখতে পারেন, ফাইলটির জন্য ফাইলআইএনফো পেতে পারেন এবং এটি ব্যবহার করে ফিরে ধাক্কা দিতে পারবেন

Response.Clear();
Response.AddHeader("Content-Disposition", "attachment; filename=" + fi.Name);
Response.AddHeader("Content-Length", fi.Length.ToString());
Response.ContentType = "application/octet-stream";
Response.WriteFile(fi.FullName);
Response.End();

যদি আপনি টেম্প ফাইলটি এড়াতে চান তবে আপনি একটি মেমরি স্ট্রমে লিখতে এবং রাইটফায়াল ব্যবহার না করে আবার বাইটগুলি লিখতে পারেন

যদি বিষয়বস্তুর দৈর্ঘ্যের শিরোনাম বাদ দেওয়া হয় তবে আপনি সরাসরি এইচটিএমএল সরাসরি লিখতে পারেন, তবে এটি সমস্ত ব্রাউজারে পুরো সময় সঠিকভাবে কাজ করতে পারে না may


4
এক্সএলএস ফাইল হিসাবে মুখোশযুক্ত এইচটিএমএল টেবুলার ডেটা সহ দুটি সম্ভাব্য সমস্যা (ওয়াইএমএমভি): (1) মাইক্রোসফ্ট এক্সেল স্বয়ংক্রিয়ভাবে শীর্ষস্থান এবং শূন্যগুলি ছাঁটাইবে; এবং (2) মাইক্রোসফ্ট এক্সেল 2010 এইচটিএমএল ট্যাবুলার ডেটাযুক্ত একটি এক্সএলএস ফাইল খোলার সময় ব্যবহারকারীকে সতর্ক করে। # 1 এর সমাধানটি ক্রিয়েটিভস্ট / ডক / আর্টিকেলস / সিএসভি / সিএসভি01.htm#CSVAndExcel বলে মনে হচ্ছে (যদি শীর্ষস্থান / শূন্যগুলি উল্লেখযোগ্য হয় এবং এটি ধরে রাখা দরকার)।
আইকোভিন্স

3

আমি ব্যক্তিগতভাবে এক্সএমএল পদ্ধতিটি পছন্দ করি। আমি ডাটাবেস থেকে ডেটাবেস থেকে ডেটা ফিরিয়ে আনব, এটি এক্সএমএলে সংরক্ষণ করব, তারপরে আমি একটি এক্সএসল্ট ফাইল তৈরি করব যাতে একটি রূপান্তর নিয়ম রয়েছে যা একটি উপযুক্ত নথির ফর্ম্যাট করবে এবং একটি সাধারণ এক্সএমএল রূপান্তর কাজ শেষ করবে finish এ সম্পর্কে সেরা অংশটি আপনি সেলগুলি ফর্ম্যাট করতে পারবেন, শর্তসাপেক্ষে বিন্যাস করতে পারবেন, শিরোনাম শিরোনাম এবং পাদচরণ এবং এমনকি মুদ্রণের ব্যাপ্তি সেট করতে পারেন।


2

আমি এটি বেশ কয়েকবার করেছি এবং প্রতিবারের সহজতম উপায়টি ছিল কেবল কোনও সিএসভি (কমা বিভাজিত মান) ফাইলটি ফিরিয়ে দেওয়া। এক্সেল এটিকে নিখুঁতভাবে আমদানি করে এবং এটি করা তুলনামূলক দ্রুত।


সিএসভি ডেটা সহ একটি সম্ভাব্য সমস্যা (ওয়াইএমএমভি): মাইক্রোসফ্ট এক্সেল নেতৃস্থানীয় স্পেস এবং শূন্যগুলি স্বয়ংক্রিয়ভাবে ছাঁটাই করবে
আইকোভিনস

2

আমরা ডেটাগ্রিড থেকে ডেটা রফতানি করি সর্বদা এক্সেল করতে। এটিকে এইচটিএমএল এ রূপান্তর করে তারপরে একটি এক্সেল ফাইলে লেখা

Response.ContentType = "application/vnd.ms-excel"
    Response.Charset = ""
    Response.AddHeader("content-disposition", "fileattachment;filename=YOURFILENAME.xls")
    Me.EnableViewState = False
    Dim sw As System.IO.StringWriter = New System.IO.StringWriter
    Dim hw As HtmlTextWriter = New HtmlTextWriter(sw)
    ClearControls(grid)
    grid.RenderControl(hw)
    Response.Write(sw.ToString())
    Response.End()

এই পদ্ধতির সাথে একমাত্র গোচাটি ছিল আমাদের প্রচুর গ্রিডগুলির মধ্যে বোতাম বা লিঙ্ক ছিল তাই আপনারও এটি দরকার need

'needed to export grid to excel to remove link button control and represent as text
Private Sub ClearControls(ByVal control As Control)
    Dim i As Integer
    For i = control.Controls.Count - 1 To 0 Step -1
        ClearControls(control.Controls(i))
    Next i

    If TypeOf control Is System.Web.UI.WebControls.Image Then
        control.Parent.Controls.Remove(control)
    End If

    If (Not TypeOf control Is TableCell) Then
        If Not (control.GetType().GetProperty("SelectedItem") Is Nothing) Then
            Dim literal As New LiteralControl
            control.Parent.Controls.Add(literal)
            Try
                literal.Text = CStr(control.GetType().GetProperty("SelectedItem").GetValue(control, Nothing))
            Catch
            End Try
            control.Parent.Controls.Remove(control)
        Else
            If Not (control.GetType().GetProperty("Text") Is Nothing) Then
                Dim literal As New LiteralControl
                control.Parent.Controls.Add(literal)
                literal.Text = CStr(control.GetType().GetProperty("Text").GetValue(control, Nothing))
                control.Parent.Controls.Remove(control)
            End If
        End If
    End If
    Return
End Sub

আমি খুঁজে পেয়েছি যে কোথাও এটি ভালভাবে কাজ করে।


4
এক্সএলএস ফাইল হিসাবে মুখোশযুক্ত এইচটিএমএল টেবুলার ডেটা সহ দুটি সম্ভাব্য সমস্যা (ওয়াইএমএমভি): (1) মাইক্রোসফ্ট এক্সেল স্বয়ংক্রিয়ভাবে শীর্ষস্থান এবং শূন্যগুলি ছাঁটাইবে; এবং (2) মাইক্রোসফ্ট এক্সেল 2010 এইচটিএমএল ট্যাবুলার ডেটাযুক্ত একটি এক্সএলএস ফাইল খোলার সময় ব্যবহারকারীকে সতর্ক করে। # 1 এর সমাধানটি ক্রিয়েটিভস্ট / ডক / আর্টিকেলস / সিএসভি / সিএসভি01.htm#CSVAndExcel বলে মনে হচ্ছে (যদি শীর্ষস্থান / শূন্যগুলি উল্লেখযোগ্য হয় এবং এটি ধরে রাখা দরকার)।
আইকোভিন্স


2

এখানে একটি প্রতিবেদন যা একটি সঞ্চিত প্রক্রিয়া থেকে টান। ফলাফল এক্সেল এক্সপোর্ট করা হয়। এটি ADO.NET এর পরিবর্তে ADO এবং এই লাইনটির কারণ ব্যবহার করে

oSheet.Cells(2, 1).copyfromrecordset(rst1)

এটি বেশিরভাগ কাজ করে এবং অ্যাডো নেটনে পাওয়া যায় না।

‘Calls stored proc in SQL Server 2000 and puts data in Excel and ‘formats it

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        Dim cnn As ADODB.Connection
        cnn = New ADODB.Connection
        cnn.Open("Provider=SQLOLEDB;data source=xxxxxxx;" & _
          "database=xxxxxxxx;Trusted_Connection=yes;")

        Dim cmd As New ADODB.Command


        cmd.ActiveConnection = cnn


        cmd.CommandText = "[sp_TomTepley]"
        cmd.CommandType = ADODB.CommandTypeEnum.adCmdStoredProc
        cmd.CommandTimeout = 0
        cmd.Parameters.Refresh()


        Dim rst1 As ADODB.Recordset
        rst1 = New ADODB.Recordset
        rst1.Open(cmd)

        Dim oXL As New Excel.Application
        Dim oWB As Excel.Workbook
        Dim oSheet As Excel.Worksheet

        'oXL = CreateObject("excel.application")
        oXL.Visible = True
        oWB = oXL.Workbooks.Add
        oSheet = oWB.ActiveSheet

        Dim Column As Integer
        Column = 1

        Dim fld As ADODB.Field
        For Each fld In rst1.Fields

            oXL.Workbooks(1).Worksheets(1).Cells(1, Column).Value = fld.Name
            oXL.Workbooks(1).Worksheets(1).cells(1, Column).Interior.ColorIndex = 15
            Column = Column + 1

        Next fld

        oXL.Workbooks(1).Worksheets(1).name = "Tom Tepley Report"
        oSheet.Cells(2, 1).copyfromrecordset(rst1)
        oXL.Workbooks(1).Worksheets(1).Cells.EntireColumn.AutoFit()


        oXL.Visible = True
        oXL.UserControl = True

        rst1 = Nothing

        cnn.Close()
        Beep()

    End Sub

1

যদি আপনি ডেটা সহ গ্রিডভিউ পূরণ করেন আপনি এইচটিএমএল ফর্ম্যাট ডেটা পেতে এই ফাংশনটি ব্যবহার করতে পারেন, তবে ব্রাউজারটি এটি একটি এক্সেল ফাইল নির্দেশ করে।

 Public Sub ExportToExcel(ByVal fileName As String, ByVal gv As GridView)

        HttpContext.Current.Response.Clear()
        HttpContext.Current.Response.AddHeader("content-disposition", String.Format("attachment; filename={0}", fileName))
        HttpContext.Current.Response.ContentType = "application/ms-excel"

        Dim sw As StringWriter = New StringWriter
        Dim htw As HtmlTextWriter = New HtmlTextWriter(sw)
        Dim table As Table = New Table

        table.GridLines = gv.GridLines

        If (Not (gv.HeaderRow) Is Nothing) Then
            PrepareControlForExport(gv.HeaderRow)
            table.Rows.Add(gv.HeaderRow)
        End If

        For Each row As GridViewRow In gv.Rows
            PrepareControlForExport(row)
            table.Rows.Add(row)
        Next

        If (Not (gv.FooterRow) Is Nothing) Then
            PrepareControlForExport(gv.FooterRow)
            table.Rows.Add(gv.FooterRow)
        End If

        table.RenderControl(htw)

        HttpContext.Current.Response.Write(sw.ToString)
        HttpContext.Current.Response.End()

    End Sub


    Private Sub PrepareControlForExport(ByVal control As Control)

        Dim i As Integer = 0

        Do While (i < control.Controls.Count)

            Dim current As Control = control.Controls(i)

            If (TypeOf current Is LinkButton) Then
                control.Controls.Remove(current)
                control.Controls.AddAt(i, New LiteralControl(CType(current, LinkButton).Text))

            ElseIf (TypeOf current Is ImageButton) Then
                control.Controls.Remove(current)
                control.Controls.AddAt(i, New LiteralControl(CType(current, ImageButton).AlternateText))

            ElseIf (TypeOf current Is HyperLink) Then
                control.Controls.Remove(current)
                control.Controls.AddAt(i, New LiteralControl(CType(current, HyperLink).Text))

            ElseIf (TypeOf current Is DropDownList) Then
                control.Controls.Remove(current)
                control.Controls.AddAt(i, New LiteralControl(CType(current, DropDownList).SelectedItem.Text))

            ElseIf (TypeOf current Is CheckBox) Then
                control.Controls.Remove(current)
                control.Controls.AddAt(i, New LiteralControl(CType(current, CheckBox).Checked))

            End If

            If current.HasControls Then
                PrepareControlForExport(current)
            End If

            i = i + 1

        Loop

    End Sub

এক্সএলএস ফাইল হিসাবে মুখোশযুক্ত এইচটিএমএল টেবুলার ডেটা সহ দুটি সম্ভাব্য সমস্যা (ওয়াইএমএমভি): (1) মাইক্রোসফ্ট এক্সেল স্বয়ংক্রিয়ভাবে শীর্ষস্থান এবং শূন্যগুলি ছাঁটাইবে; এবং (2) মাইক্রোসফ্ট এক্সেল 2010 এইচটিএমএল ট্যাবুলার ডেটাযুক্ত একটি এক্সএলএস ফাইল খোলার সময় ব্যবহারকারীকে সতর্ক করে। # 1 এর সমাধানটি ক্রিয়েটিভস্ট / ডক / আর্টিকেলস / সিএসভি / সিএসভি01.htm#CSVAndExcel বলে মনে হচ্ছে (যদি শীর্ষস্থান / শূন্যগুলি উল্লেখযোগ্য হয় এবং এটি ধরে রাখা দরকার)।
আইকোভিন্স

1

মাইক্রোসফ্ট.অফিস.আইন্টার ইন্টারপ নেমস্পেসের মাধ্যমে কেবল সিএমএম ইন্টারপ এড়ান। এটি এতটাই ধীর এবং অবিশ্বাস্য এবং অপূরণীয়। মাসোশিস্টদের জন্য প্রযোজ্য নয়।


1

আপনি এই লাইব্রেরিটি ব্যবহার করে খুব সহজেই দুর্দান্ত ফর্ম্যাট করা এক্সেল ফাইল তৈরি করতে পারেন: http://officehelper.codeplex.com/docamentation

মাইক্রোসফ্ট অফিসে ওয়েব সার্ভারে ইনস্টল করার দরকার নেই!


0

সিএসভি সহজতম উপায়। বেশিরভাগ সময় এটি এক্সেলের সাথে যুক্ত থাকে। অন্যথায় আপনাকে অটোমেশন এপিআই বা এক্সএমএল ফর্ম্যাট ব্যবহার করতে হবে। এপিআই এবং এক্সএমএল ব্যবহার করা এতটা কঠিন নয়।

এক্সেলের জন্য এক্সএমএল উত্পাদন সম্পর্কে তথ্য


0

আমি হয় CSV রুট (উপরে বর্ণিত হিসাবে) যান, বা এই দিন প্রায়শই প্রায়শই আমি ফাইলটি তৈরি করতে ইনফ্রাজিস্টিকস নেটএডভান্টেজ ব্যবহার করি। (ইনফ্রাজিস্টিকস যখন চলছে তার বেশিরভাগ অংশ আমরা কেবলমাত্র একটি বিদ্যমান আল্ট্রাওয়েবগ্রিড রফতানি করছি যা অতিরিক্ত ফরম্যাটিং টুইটগুলি না করা প্রয়োজনে মূলত এক-এলওসি সমাধান। আমরা ম্যানুয়ালি একটি এক্সেল / বিআইএফএফ ফাইলও তৈরি করতে পারি, তবে খুব কমই দরকার আছে))


0

ম্যান, নেট। আমি অনুমান করি যে এটি করতে পারার মতো একটি উপাদান আপনার কাছে থাকতে পারে তবে ক্লাসিক এসপে আমি ইতিমধ্যে এটি একটি html টেবিল তৈরি এবং পৃষ্ঠার মাইম টিপকে ভেন্ডি / এমএসেক্সেলতে পরিবর্তন করেছি। আমি অনুমান করি আপনি যদি গ্রিডভিউ ব্যবহার করেন এবং মাইম টাইপ পরিবর্তন করেন তবে এটির কাজ করা উচিত, কারণ গ্রিডভিউ একটি এইচটিএমএল সারণী।


এক্সএলএস ফাইল হিসাবে মুখোশযুক্ত এইচটিএমএল টেবুলার ডেটা সহ দুটি সম্ভাব্য সমস্যা (ওয়াইএমএমভি): (1) মাইক্রোসফ্ট এক্সেল স্বয়ংক্রিয়ভাবে শীর্ষস্থান এবং শূন্যগুলি ছাঁটাইবে; এবং (2) মাইক্রোসফ্ট এক্সেল 2010 এইচটিএমএল ট্যাবুলার ডেটাযুক্ত একটি এক্সএলএস ফাইল খোলার সময় ব্যবহারকারীকে সতর্ক করে। # 1 এর সমাধানটি ক্রিয়েটিভস্ট / ডক / আর্টিকেলস / সিএসভি / সিএসভি01.htm#CSVAndExcel বলে মনে হচ্ছে (যদি শীর্ষস্থান / শূন্যগুলি উল্লেখযোগ্য হয় এবং এটি ধরে রাখা দরকার)।
আইকোভিন্স

0

"এটিকে দেখে মনে হচ্ছে যে এই সংখ্যাগুলি পাঠ্য হিসাবে সঞ্চিত আছে" এড়িয়ে চলার একমাত্র বুলেটপ্রুফ উপায় হ'ল সবুজ ত্রিভুজগুলি ওপেন এক্সএমএল ফর্ম্যাটটি ব্যবহার করা। এটি অনিবার্য সবুজ ত্রিভুজগুলি এড়াতে এটি ব্যবহার করার উপযুক্ত।


0

এক্সেল রিপোর্টগুলির জন্য আমি যে সর্বোত্তম পদ্ধতিটি দেখেছি তা হ'ল এক্সএমএল ডেটাটি এক্সএমএল এক্সটেনশান সহ লিখে ফেলা এবং সঠিক সামগ্রীর ধরণের সাথে ক্লায়েন্টদের কাছে প্রবাহিত করা। (অ্যাপ্লিকেশন / এক্সএলএস)

এটি এমন কোনও প্রতিবেদনের জন্য কাজ করে যার জন্য বুনিয়াদি গঠনের প্রয়োজন হয় এবং আপনাকে পাঠ্য তুলনা সরঞ্জামগুলি ব্যবহার করে বিদ্যমান স্প্রেডশিটের বিপরীতে তুলনা করতে দেয়।


0

ধরে নিলাম এটি একটি ইন্ট্রানেটের জন্য, যেখানে আপনি অনুমতি সেট করতে পারেন এবং ম্যান্ডেট করতে পারেন, আপনি জেএসক্রিপ্ট / ভিবিএস স্ক্রিপ্ট ড্রাইভিং এক্সেলের সাথে ওয়ার্কবুক ক্লায়েন্টের পক্ষে তৈরি করতে পারেন । সার্ভারে এক্সেল স্বয়ংক্রিয় করার চেষ্টা করার ঝামেলা ছাড়াই এটি আপনাকে দেশীয় এক্সেল ফর্ম্যাটিং দেয়।

আমি নিশ্চিত নই যে আমি মোটামুটি কুলুঙ্গি পরিস্থিতি বাদে এই পদ্ধতির আরও সুপারিশ করেছি, তবে ক্লাসিক এএসপি হেডেজে এটি মোটামুটি সাধারণ ছিল।


0

আপনি অবশ্যই সর্বদা তৃতীয় পক্ষের উপাদানগুলির জন্য যেতে পারেন। ব্যক্তিগতভাবে, আমি স্পায়ার.এক্সএলএসের সাথে একটি ভাল অভিজ্ঞতা পেয়েছি http://www.e-iceblue.com/xls/xlsintro.htm এর

উপাদানটি আপনার প্রয়োগের মধ্যে ব্যবহার করা বেশ সহজ:

        Workbook workbook = new Workbook();

        //Load workbook from disk.
        workbook.LoadFromFile(@"Data\EditSheetSample.xls");
        //Initailize worksheet
        Worksheet sheet = workbook.Worksheets[0];

        //Writes string
        sheet.Range["B1"].Text = "Hello,World!";
        //Writes number
        sheet.Range["B2"].NumberValue = 1234.5678;
        //Writes date
        sheet.Range["B3"].DateTimeValue = System.DateTime.Now;
        //Writes formula
        sheet.Range["B4"].Formula = "=1111*11111";

        workbook.SaveToFile("Sample.xls");

0

উপরের প্রস্তাবিত সমাধানগুলির একটি ব্যবহার করে আমি যে সমস্যার মুখোমুখি হয়েছি সেগুলির মধ্যে একটি যা এই উত্তরের মতো তা হ'ল আপনি যদি বিষয়বস্তুকে সংযুক্তি হিসাবে ধাক্কা দেন (আমি কী নন-এমএস ব্রাউজারগুলির জন্য সবচেয়ে পরিষ্কার সমাধান হিসাবে খুঁজে পেয়েছি) , তারপরে এটি এক্সেল 2000-2003 এ খুলুন, এর ধরণটি একটি "এক্সেল ওয়েব পৃষ্ঠা" এবং নেটিভ এক্সেল নথি নয় not

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

আমার প্রস্তাবটি সিএসভি ব্যবহার করা। এটি সহজ এবং যদি ব্যবহারকারীরা এটি এক্সেলের মধ্যে থেকে খোলেন, এক্সেল কমপক্ষে তাদের এটিকে তার স্থানীয় ফর্ম্যাটে সংরক্ষণের অনুরোধ জানাবে।


আপনার ব্যবহারকারীরা বিশ্বজুড়ে ছড়িয়ে ছিটিয়ে থাকলে আপনার CSV এর প্রতি যত্নবান হওয়া দরকার। এখানে জার্মানিতে কমাটি দশমিক বিভাজক হিসাবে ব্যবহৃত হয় এবং সেমিকোলনটি মান বিভাজক হিসাবে ব্যবহৃত হয়। এমন একটি ফাইল তৈরি করা কঠিন করে তোলে যা বিভিন্ন সংস্কৃতিতে পাঠযোগ্য। সুতরাং আমার ভোটটি এক্সএমএল ফর্ম্যাটের একটির পক্ষে হবে।
পল

0

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


0

এখানে একটি সমাধান সিএসভি হিসাবে ডেটাতেবল স্ট্রিম প্রবাহিত করে। দ্রুত, পরিষ্কার এবং সহজ এবং এটি ইনপুটটিতে কমা পরিচালনা করে।

public static void ExportToExcel(DataTable data, HttpResponse response, string fileName)
{
    response.Charset = "utf-8";
    response.ContentEncoding = System.Text.Encoding.GetEncoding("windows-1250");
    response.Cache.SetCacheability(HttpCacheability.NoCache);
    response.ContentType = "text/csv";
    response.AddHeader("Content-Disposition", "attachment; filename=" + fileName);

    for (int i = 0; i < data.Columns.Count; i++)
    {
       response.Write(data.Columns[i].ColumnName);
       response.Write(i == data.Columns.Count - 1 ? "\n" : ",");
    }        
    foreach (DataRow row in data.Rows)
    {
        for (int i = 0; i < data.Columns.Count; i++)
        {
            response.Write(String.Format("\"{0}\"", row[i].ToString()));
            response.Write(i == data.Columns.Count - 1 ? "\n" : ",");
        }
    }

    response.End();
}

-1

আশা করা যায় যে এটি অন্যকে সাহায্য করবে এক্সেল করার জন্য সবেমাত্র # ফর্ম সি # থেকে রফতানি করার জন্য একটি ফাংশন তৈরি করেছে

    public void ExportFileFromSPData(string filename, DataTable dt)
    {
        HttpResponse response = HttpContext.Current.Response;

        //clean up the response.object
        response.Clear();
        response.Buffer = true;
        response.Charset = "";

        // set the response mime type for html so you can see what are you printing 
        //response.ContentType = "text/html";
        //response.AddHeader("Content-Disposition", "attachment;filename=test.html");

        // set the response mime type for excel
        response.ContentType = "application/vnd.ms-excel";
        response.AddHeader("Content-Disposition", "attachment;filename=\"" + filename + "\"");
        response.ContentEncoding = System.Text.Encoding.UTF8;
        response.BinaryWrite(System.Text.Encoding.UTF8.GetPreamble());

        //style to format numbers to string
        string style = @"<style> .text { mso-number-format:\@; } </style>";
        response.Write(style);

        // create a string writer
        using (StringWriter sw = new StringWriter())
        {
            using (HtmlTextWriter htw = new HtmlTextWriter(sw))
            {
                // instantiate a datagrid
                GridView dg = new GridView();
                dg.DataSource = dt;
                dg.DataBind();

                foreach (GridViewRow datarow in dg.Rows)
                {
                    //format specific cell to be text 
                    //to avoid 1.232323+E29 to get 1232312312312312124124
                    datarow.Cells[0].Attributes.Add("class", "text");
                }

                dg.RenderControl(htw);
                response.Write(sw.ToString());
                response.End();
            }
        }
     }

-5

আপনার যদি কোনও সিএসভি ফাইলের পরিবর্তে এক্সেল ব্যবহার করতে হয় তবে আপনাকে একটি এক্সেল উদাহরণস্বরূপ একটি সার্ভারে ওএলই অটোমেশন ব্যবহার করতে হবে। এটি করার সহজতম উপায় হ'ল একটি টেমপ্লেট ফাইল থাকা এবং প্রোগ্রামের মাধ্যমে ডেটা দিয়ে এটি পূরণ করা। আপনি এটি অন্য একটি ফাইলে সংরক্ষণ করুন।

পরামর্শ:

  • এটি ইন্টারেক্টিভভাবে করবেন না। ব্যবহারকারীর প্রক্রিয়াটি শুরু করুন এবং তারপরে ফাইলটির লিঙ্ক সহ একটি পৃষ্ঠা পোস্ট করুন। স্প্রেডশিট তৈরি করার সময় এটি সম্ভাব্য পারফরম্যান্সের সমস্যাগুলিকে প্রশমিত করে।
  • আমি পূর্বে বর্ণিত হিসাবে টেম্পলেট ব্যবহার করুন। এটি এটিকে সংশোধন করা সহজ করে তোলে।
  • নিশ্চিত করুন যে এক্সেলটি ডায়ালগগুলি পপআপ না করার জন্য সেট করা আছে। একটি ওয়েব সার্ভারে এটি পুরো এক্সেল উদাহরণটি স্তব্ধ করবে।
  • এক্সেল উদাহরণটিকে একটি পৃথক সার্ভারে রাখুন, পছন্দমত ফায়ারওয়ালের পিছনে, তাই এটি কোনও সম্ভাব্য সুরক্ষা গর্ত হিসাবে প্রকাশিত হয় না।
  • সংস্থান ব্যবহারের দিকে নজর রাখুন। ওএলই অটোমেশন ইন্টারফেসের উপর স্প্রেডশিট উত্পন্ন করা (পিআইএরাই কেবল এটিকে দেখায়) এটি মোটামুটি হেভিওয়েট প্রক্রিয়া। আপনার যদি উচ্চ ডেটা ভলিউমে এটি স্কেল করতে হয় তবে আপনার আপনার স্থাপত্যের সাথে কিছুটা চালাক হওয়া দরকার।

কিছু কিছু 'মাইম-প্রকারের ব্যবহার এইচটিএমএল টেবিল খোলার ক্ষেত্রে এক্সেলকে চালিত করতে' পন্থাগুলি কার্যকর হবে যদি আপনি ফাইলটির ফর্ম্যাটটিকে কিছুটা বেসিক মনে করেন না। এই পদ্ধতিগুলি ক্লায়েন্টের উপরে সিপিইউ ভারী কাজ বন্ধ করে দেয়। আপনি যদি স্প্রেডশিটের ফর্ম্যাটের উপর সূক্ষ্ম-গ্রেড নিয়ন্ত্রণ চান তবে উপরের বর্ণিত ফাইলটি তৈরি করতে আপনাকে সম্ভবত এক্সেল ব্যবহার করতে হবে।


ওয়েব সার্ভার থেকে অটোমেশন করা খারাপ ধারণা। বিকল্পগুলি হ্যাক-ইশ মনে হতে পারে তবে তারা সত্যিই আরও ভালভাবে কাজ করবে।
জোয়েল কোহোর্ন

আমরা এক্সেলের সাথে সার্ভার-সাইড OLE ব্যবহার করি এবং এটি পিছনের দিকের এক বিশাল ব্যথা। যদি এটি আমাদের পণ্য ঝুঁকি না করে **, আমরা অন্য একটি সমাধান নিয়ে যেতে চাই। ** আপনি জানেন এমন শয়তান আরও ভাল ...
ডেভ ই
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.