CSV 导出

 

    #region CSV导出
    /// <summary>
    /// CSV导出
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void btnCSV_Click(object sender, EventArgs e)
    {
        // 模块名
        String module = this.pageId + ":btnCSV_Click";

        try
        {
            // 函数开始时写Log
            LogHelper.f_Info(module, CommonLogString.Entry);

            //检索条件设定

            ArrayList paramList = new ArrayList();

            paramList.Clear();

            // 出库要求批号
            paramList.Add(hidBookingRequestNo.Value);

            // 品目
            paramList.Add(hidItemID.Value);

            // CODE
            paramList.Add(hidCode.Value);

            // 出库序列号
            paramList.Add(hidSerialNoFrom.Value);

            paramList.Add(hidSerialNoTo.Value);

            // 机种

            paramList.Add(hidModel.Value);

            // WP
            paramList.Add(hidWP.Value);

            // 出库日期

            paramList.Add(hidBookingDateFrom.Value);

            paramList.Add(hidBookingDateTo.Value);

            // 出库操作者

            paramList.Add(hidBookingBy.Value);

            // 要求数量

            paramList.Add(hidRequestQty.Value);

            // 出库数量

            paramList.Add(hidBookingQty.Value);

            DataTable dtbl = new DataTable();

            // 检索出库详细信息
            dtbl = DbHelper.ExecuteCombine(pageId, SQL001, paramList);

            if (dtbl.Rows.Count > 65536)
            {
                // 確認メッセージを表示する
                string q0014 = msgHelper.f_GetMsg("数据量已超过Excel行数的最大范围,继续吗?");
                f_GetDisplayInfo().f_SetConfirmMessage(q0014, Page);

                return;
            }

            //获得sheet名(每个DataTable对应一个sheet)
            //从资源文件取得画面信息
            string resourceValue = (string)base.GetLocalResourceObject("pageInfoResource");
            string[] sheetname ={ resourceValue };

            //获得Excel文件名

            string filename = resourceValue;

            // 列名国际化
            Int32 columncount = dtbl.Columns.Count;
            for (Int32 iCol = 0; iCol < columncount; iCol++)
            {
                string columnName = dtbl.Columns[iCol].ColumnName;
                string resourcekey = columnName + "Resource";
                string resourcesValue = (string)base.GetLocalResourceObject(resourcekey);
                filename = filename + "," + resourcesValue;
            }

            //获得列索引

            int columnIndexFrom = 0;

            int columnIndexTo = dtbl.Columns.Count - 1;

            //生成Excel文件
            new PrintHelper().f_WriteCSV(dtbl, filename, columnIndexFrom, columnIndexTo);

            // 函数结束时写Log
            LogHelper.f_Info(module, CommonLogString.Exit);
        }
        catch (Exception ex)
        {
            LogHelper.f_Fatal(module, ex);
            throw ex;
        }
    }
    #endregion

 

        /// <param name="dt">数据表</param>
        /// <param name="Header">文件头</param>
        /// <param name="columnCount">指定显示DataTable的第几列到第几列,不包括GridView的模板列</param>
        public void f_WriteCSV(DataTable dt, string Header, int from, int to)
        {
            StringWriter sw = new StringWriter();
            sw.WriteLine(Header);

            string outLine = string.Empty;
            int No = 0;//生成自动编号
            string value = string.Empty;
            string strnew = string.Empty;
            string strres = string.Empty;
            foreach (DataRow drow in dt.Rows)
            {
                for (int i = from; i < to; i++)
                {
                    //隐藏字段不写入客户端
                    value = DbHelper.Nc(drow, dt.Columns[i].ColumnName).ToString();

                    //判断列值是否为空
                    if (value.Equals("") || value == null)
                    {
                        strres = "";

                    }
                    else
                    {
                        // change by ZhuangGuoqiang in 2009/11/30 start
                        //if (value.Contains(","))
                        //{
                        //    strarr = value.Split(',');
                        //    foreach (string str in strarr)
                        //    {
                        //        strres += str;

                        //    }

                        //}
                        //else
                        //{
                        //    strres = value;
                        //}
                        strres = value.Replace(",", ",").Replace("\n", "").Replace("\r", "");
                        // change by ZhuangGuoqiang in 2009/11/30 end
                    }

                    outLine = outLine + strres + ",";
                    strres = string.Empty;

                }
                //去除每行最后一个逗号
                if (outLine.EndsWith(","))
                {
                    outLine = outLine.Substring(0, outLine.Length - 1);
                }
                sw.WriteLine(No + 1 + "," + outLine);
                No++;
                outLine = string.Empty;
            }
            sw.Flush();
            sw.Close();
            HttpContext.Current.Response.ContentType = "application/ms-excel";

            //进行编码处理
            string language = HttpContext.Current.Request.UserLanguages[0];

            if (language.Contains("cn")) //中文
            {
                HttpContext.Current.Response.Charset = Encoding.GetEncoding("gb2312").EncodingName;
                HttpContext.Current.Response.ContentEncoding = Encoding.GetEncoding("gb2312");
            }
            else if (language.Contains("ja")) //日文
            {
                HttpContext.Current.Response.Charset = Encoding.GetEncoding("shift_jis").EncodingName;
                HttpContext.Current.Response.ContentEncoding = Encoding.GetEncoding("shift_jis");
            }
            else //其他语言
            {
                HttpContext.Current.Response.Charset = Encoding.UTF8.EncodingName;
                HttpContext.Current.Response.ContentEncoding = Encoding.UTF8;
            }

            //CSV文件以页面ID加上年月日,小时分秒为文件名的形式保存
            string curPageId = (string)HttpContext.Current.Session["curPageId"];
            string strdate = DateTime.Now.ToString("yyyyMMddHHmmss");
            HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment; filename=" + curPageId + strdate + ".csv");
            HttpContext.Current.Response.Write(sw);
            HttpContext.Current.Response.End();
        }

 

       public static object Nc(DataRow row, String colName)
        {
            object rtn = null;

            string module = null;
            module = "DbHeper.Nc(row,colName)";

            //函数开始Log
            LogHelper.f_Info(module, CommonLogString.Entry);

            try
            {
                string coltype;
                coltype = row.Table.Columns[colName].DataType.ToString();

                if (Convert.IsDBNull(row[colName]))
                {
                    switch (coltype)
                    {
                        case "System.Boolean":  // bit系਍ഀ
                            rtn = false;
                            break;

                        case "System.Int16":  // 数値系
                            rtn = 0;
                            break;
                        case "System.Int32":
                            rtn = 0;
                            break;
                        case "System.Int64":
                            rtn = 0;
                            break;
                        case "System.Decimal":
                            rtn = (Decimal)0;
                            break;
                        case "System.Double":
                            rtn = (Double)0;
                            break;
                        case "System.Single":
                            rtn = (Single)0;
                            break;

                        case "System.String":  // 文字列系
                            rtn = String.Empty;
                            break;
                        default:     // その他
                            // その他はそのままの値を返す
                            rtn = row[colName];
                            break;
                    }
                }
                else
                {
                    switch (coltype)
                    {
                        case "System.String":  // 文字列系
                            rtn = row[colName].ToString().Trim();
                            break;
                        default:     // その他
                            rtn = row[colName];
                            break;
                    }
                }

            }
            catch (Exception ex)
            {
                LogHelper.f_Fatal(module, ex);
                throw (ex);
            }

            //函数结束Log
            LogHelper.f_Info(module, CommonLogString.Exit);

            return rtn;
        }
C# WinForms是一种用于创建Windows桌面应用程序的开发框架,而CSV(逗号分隔值)是一种常见的文件格式,用于存储表格数据。在C# WinForms中进行CSV导出可以通过以下步骤实现: 1. 首先,你需要创建一个WinForms应用程序,并添加一个按钮或其他触发导出操作的控件。 2. 在按钮的点击事件处理程序中,你可以使用C#的文件操作类(如StreamWriter)来创建一个CSV文件,并将数据写入其中。你可以使用适当的分隔符(如逗号)将每个字段分隔开。 3. 在写入CSV文件之前,你需要准备好要导出的数据。这可以是来自数据库、集合或其他数据源的数据。你可以使用C#的数据访问技术(如ADO.NET)来检索和处理数据。 4. 将数据写入CSV文件时,你可以使用循环遍历数据集合,并将每个字段的值写入文件中。确保在每行结束时添加换行符。 5. 最后,保存并关闭CSV文件。 下面是一个简单的示例代码,演示了如何在C# WinForms中进行CSV导出: ```csharp private void btnExport_Click(object sender, EventArgs e) { // 准备要导出的数据(示例数据) List<string[]> data = new List<string[]> { new string[] { "Name", "Age", "Email" }, new string[] { "John Doe", "30", "john@example.com" }, new string[] { "Jane Smith", "25", "jane@example.com" }, new string[] { "Bob Johnson", "35", "bob@example.com" } }; // 创建并打开CSV文件 using (StreamWriter sw = new StreamWriter("export.csv")) { // 写入数据到CSV文件 foreach (string[] row in data) { sw.WriteLine(string.Join(",", row)); } } MessageBox.Show("CSV导出成功!"); } ``` 请注意,上述示例仅演示了基本的CSV导出过程。在实际应用中,你可能需要根据具体需求进行更复杂的数据处理和格式化操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值