VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1769|回复: 12

DataGridView导入Excel后的后续问题

[复制链接]

2

主题

8

帖子

6.00

积分

新手上路

Rank: 1

积分
6.00
发表于 2020-2-10 12:30:02 | 显示全部楼层 |阅读模式
我用如下方法把DataGridView的数据导入Excel后:
因为我有些字段的值是全数字的并以0开头,Excel默认的情况下会当作数字型,这样会把开头的0去掉。能不能把Excel单元格的类型都设置为文本型??
SaveFileDialog saveFileDialog = new SaveFileDialog();
            saveFileDialog.Filter = "Execl files (*.xls)|*.xls";
            saveFileDialog.FilterIndex = 0;
            saveFileDialog.RestoreDirectory = true;
            saveFileDialog.CreatePrompt = true;
            saveFileDialog.Title = "导出Excel文件到";

            saveFileDialog.ShowDialog();

            if (saveFileDialog.FileName != "")
            {
                Stream myStream;
                myStream = saveFileDialog.OpenFile();
                StreamWriter sw = new StreamWriter(myStream, System.Text.Encoding.GetEncoding("gb2312"));
                string str = "";
                try
                {
                    //写标题
                    for (int i = 0; i < this.sc_madanDataGridView.ColumnCount; i++)
                    {
                        if (i > 0)
                        {
                            str += "\t";
                        }
                        str += sc_madanDataGridView.Columns[i].HeaderText;
                    }

                    sw.WriteLine(str);
                    //写内容
                    for (int j = 0; j < sc_madanDataGridView.Rows.Count; j++)
                    {
                        string tempStr = "";
                        for (int k = 0; k < sc_madanDataGridView.Columns.Count; k++)
                        {
                            if (k > 0)
                            {
                                tempStr += "\t";
                            }
                            tempStr += sc_madanDataGridView.Rows[j].Cells[k].FormattedValue.ToString();
                        }
                        sw.WriteLine(tempStr);
                    }
                    sw.Close();
                    myStream.Close();
                }
                catch
                {
                    MessageBox.Show(e.ToString());
                }
                finally
                {
                    sw.Close();
                    myStream.Close();
                }
回复

使用道具 举报

0

主题

2

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2020-4-11 13:15:01 | 显示全部楼层
可单独设置EXCEL文件的格式为文本。如因版本问题不能引用COM进行设置的话就请上网搜索并参照late binding 方法可调用到EXCEL中的Selection.NumberFormatLocal = "@"或是你将所有的数据前面都加上"@",这个没试过,不知道会有什么效果,呵呵~~~
回复

使用道具 举报

2

主题

8

帖子

6.00

积分

新手上路

Rank: 1

积分
6.00
 楼主| 发表于 2020-8-1 17:30:01 | 显示全部楼层
加‘@’不行啊
回复

使用道具 举报

0

主题

5

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-8-12 09:15:01 | 显示全部楼层
由于是采用stream读写,而非com组件,其他的方法都不行。在需要作处理的数据前加"'"单引号。
回复

使用道具 举报

2

主题

8

帖子

6.00

积分

新手上路

Rank: 1

积分
6.00
 楼主| 发表于 2020-8-12 09:45:01 | 显示全部楼层
由于是采用stream读写,而非com组件


对的,但是我加了单引号后是直接在Excel里输出,没有作用。
tempStr +="'" + sc_madanDataGridView.Rows[j].Cells[k].FormattedValue.ToString();
回复

使用道具 举报

0

主题

5

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-8-12 10:30:01 | 显示全部楼层
楼主你把问题在描述清楚点吧。你可以新建一个excel文件,看看在一个单元格里输入"'01234"和"01234"的区别
回复

使用道具 举报

0

主题

5

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-8-12 11:00:02 | 显示全部楼层
tempStr += sc_madanDataGridView.Rows[j].Cells[k].FormattedValue.ToString();
然后
sw.WriteLine(tempStr);
这样写进去,是将一行写到一个单元格里还是多个格里?
回复

使用道具 举报

2

主题

8

帖子

6.00

积分

新手上路

Rank: 1

积分
6.00
 楼主| 发表于 2020-8-12 11:15:01 | 显示全部楼层
for (int k = 0; k < sc_madanDataGridView.Columns.Count; k++)
   {
      if (k > 0)
        {
            tempStr += "\t";
        }
     tempStr +="'" + sc_madanDataGridView.Rows[j].Cells[k].FormattedValue.ToString();
   }
sw.WriteLine(tempStr);

比较完整的是这样的。现在写到Excel里显示是“'001001”,当双击单元格后“'”就不见了
回复

使用道具 举报

0

主题

5

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-8-12 11:30:01 | 显示全部楼层
那不就是你要的结果吗?
回复

使用道具 举报

2

主题

8

帖子

6.00

积分

新手上路

Rank: 1

积分
6.00
 楼主| 发表于 2020-8-12 12:00:01 | 显示全部楼层
但是显示的时候“'001001”,需要双击每个单元格才会隐藏“'”
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表