MS Excel


1. GridView to Excel

ตัวอย่างนี้จะได้ Format ของ GridView มาด้วย ถ้ามีรูปอยู่ใน GridView ต้องเป็น Full URL Path ถึงจะ Export รูปออกมาได้ เช่น http://xxx.com/test/pic.png ถ้าเป็น /test/pic.png แบบนี้รูปจะไม่มาด้วย

    protected void btnExport_Click(object sender, EventArgs e)
    {
        Response.Clear();
        Response.Buffer = true;
        Response.AddHeader("content-disposition", "attachment;filename=GridViewExport.xls");
        Response.ContentType = "application/vnd.ms-excel";
        StringWriter sw = new StringWriter();
        HtmlTextWriter hw = new HtmlTextWriter(sw);
        GridView1.RenderControl(hw);
        Response.Output.Write(sw.ToString());
        Response.Flush();
        Response.End();
    }
    public override void VerifyRenderingInServerForm(Control control)
    {
        /* Confirms that an HtmlForm control is rendered for the specified ASP.NET server control at run time. */
    }

แบบนี้ format ทีเป็น style จะไม่มาด้วย

    protected void btnExport_Click(object sender, EventArgs e)
    {
        Response.ClearContent();
        Response.AddHeader("content-disposition", "attachment;filename=" + fileName);
        Response.Cache.SetCacheability(HttpCacheability.NoCache);
        Response.ContentType = _contentType;
        StringWriter sw = new StringWriter();
        HtmlTextWriter htw = new HtmlTextWriter(sw);
        System.Web.UI.HtmlControls.HtmlForm frm = new System.Web.UI.HtmlControls.HtmlForm();
        frm.Attributes["runat"] = "server";
        frm.Controls.Add(GridView1);
        GridView1.RenderControl(htw);
        Response.Write(sw.ToString());
        Response.End();
    }

2. Copy / Paste
วิธีนี้ใช้ได้โดยครอบส่วนที่ต้องการ Copy โดยใช้ Tag div แล้วให้ user กดที่ button Copy แล้วนำไป Paste ที่ Excel

<input type="button" value="Copy" onclick="window.clipboardData.setData('Text', document.all['MainDiv'].innerHTML)" />

3. Export to CSV
โดยดึงข้อมูลจาก DataTable

    protected void btnExport_Click(object sender, EventArgs e)
    {
        System.Threading.Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.CreateSpecificCulture("th-TH");
        DataTable dt = Session["ActualReceive"] as DataTable;
        Response.ClearContent();
        Response.AddHeader("Content-Disposition", "attachment;filename=ActualReceiveReport.csv");
        Response.ContentType = "application/vnd.ms-excel";
        string tab = "";
        foreach (DataColumn dc in dt.Columns)
        {
            Response.Write(tab + "\"" + dc.ColumnName + "\"");
            tab = ",";
        }
        Response.Write("\r\n");

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

http://aspalliance.com/
http://www.aspsnippets.com/ มี export -> word, pdf ด้วย
http://mattberseth.com/
http://forums.asp.net/

มาอีกแล้วครับ Excel Password Recovery คราวนี้มี 2 ตัวครับ Remove ได้ทั้ง Password Excel และ Excel VBA 

ที่สำคัญเป็น Freeware ด้วย จาก http://www.excel-tool.com/blog.html ลอง Download ไปใช้ดูครับ

Excel Password Recovery

http://msdn.microsoft.com/en-us/library/bb905050(VS.80).aspx

http://support.microsoft.com/kb/306023

It doesn’t seem to be well known that you can easily access data in CSV files (Comma-Separated Values) using ADO.NET components. For example, you can use the OleDbConnection, OleDbCommand, and OleDbDataAdapter objects to fill a DataSet from a CSV file. You can also update the data. Also notice that it is possible to use Visual Studio’s Server Explorer to visualize or edit CSV files.

All you need is to use the Jet engine thanks to a connection string like the following one:

“Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\TxtFilesFolder\;Extended Properties=’text;HDR=Yes;FMT=Delimited'”

Note: “HDR=Yes” indicates that the first row contains columnnames, not data (source: connectionstrings.com).

Once you have a connection to a directory, you can refer to files as tables as follows:

“SELECT * FROM data.txt”

Hint: Think about JOINs if you need them…

So, why not use ADO.NET’s power to access CSV files instead of coding this all by yourself?

Update: this post seems very popular, so I guess it’s useful that I add two links about the Schema.ini file for more information:

Update: interesting comment by David:

Recap: Reading columns with mixed data types (that is, with data that could appear to a stupid OleDB driver to be of two types), you must use registry modifications AND extended properties on the connection string.

For Excel, the connection string is:

string.Format(@”Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};” + @” Extended Properties=””{1}”””, pathName, “Excel 8.0;HDR=YES;IMEX=1″);

In the registry, set:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Excel\ImportMixedTypes = Text

and

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Excel\TypeGuessRows = 0

For CSV, the connection string is:

string.Format(@”Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};” + @” Extended Properties=””{1}”””, path, “Text;HDR=YES;FMT=Delimited;IMEX=1”);

In the registry, set:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Text\ImportMixedTypes = “Text”

and

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Text\MaxScanRows = “0”

ที่มา: http://weblogs.asp.net/fmarguerie/archive/2003/10/01/29964.aspx

ดูตามรูปเลยนะครับ เปิด VBA เลือก ThisWorkbook -> เลือก Workbook และเลือก Open จะได้ Sub Workbook_Open() มา เขียน Code ลงในนี้เลยครับ พอเปิด Excel ก็จะทำ Code ในนี้ก่อนเลย

http://codehill.com/2009/01/reading-excel-2003-and-2007-files-using-oledb/

พอดีวันนี้ทำงาน excel อย่างหนึ่ง โดยก๊อบจากต้นแบบเอามาแปลงนิดหน่อย แต่ติดปัญหาก็คือไฟล์ต้นฉบับ sheet ถูก protect ไว้ทำให้ copy ไม่ได้ copy ทั้ง sheet ก็ยัง protect อยู่ เลย search หาเจอ Add-In ตัวนึงสำหรับ unprotect โดยทำได้ทั้ง unprotect sheet และ unprotect workbook (more…)