找回密码
 立即注册

QQ登录

只需一步,快速开始

fanhy

论坛元老

9

主题

36

帖子

8017

积分

论坛元老

积分
8017

活字格认证

fanhy
论坛元老   /  发表于:2014-8-29 11:19  /   查看:9352  /  回复:11
你好!

   产品版本:V7.4
   在使用产品的时候,如果有两个sheet页的时候,第二个sheet页是根据第一个sheet用公式关联过来的。在生成数据的时候,发现
第二个sheet页的数据第一行总是被冲掉。请协助看下。

11 个回复

倒序浏览
iceman
社区贡献组   /  发表于:2014-8-29 14:32:00
沙发
回复 1楼fanhy的帖子

fanhy 你好,

我通过附件 Demo 没有重现问题(VS2013 + C# + .NET 4.0 + Spread 7.0V4):
13656.zip (64.46 KB, 下载次数: 540)
回复 使用道具 举报
fanhy
论坛元老   /  发表于:2014-8-29 17:12:00
板凳
你好!
数据绑定方式是这样的!

this.fpSpread1.OpenExcel(reportFileName);//打开Excel模板
fpSpread1.ActiveSheet.DataSource = dt;   //数据绑定  dt就是一个DataTable
fpSpread1.SaveExcel(path,FarPoint.Win.Spread.Model.IncludeHeaders.ColumnHeadersCustomOnly);//保存
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2014-8-29 18:28:00
地板
回复 3楼fanhy的帖子

那应该是被数据源绑定覆盖掉了原来excel的值,下面是区域绑定方法:

  1. DataSet ds = new DataSet();
  2. DataTable dt = default(DataTable);
  3. dt = new DataTable();
  4. dt.Columns.Add(new DataColumn("Number1", typeof(string)));
  5. dt.Columns.Add(new DataColumn("Number2", typeof(string)));
  6. dt.Columns.Add(new DataColumn("Number3", typeof(string)));
  7. dt.Columns.Add(new DataColumn("Text1", typeof(string)));
  8. dt.Columns.Add(new DataColumn("Text2", typeof(string)));
  9. dt.Columns.Add(new DataColumn("Text3", typeof(string)));
  10. dt.Columns.Add(new DataColumn("Text4", typeof(decimal)));
  11. dt.Rows.Add(new object[] { "101", "1", "0", "Num1", "Num2", "Num3", 21000 });
  12. dt.Rows.Add(new object[] { "201", "2", "0", "a", "b", "c", 9400 });
  13. dt.Rows.Add(new object[] { "203", "2", "0", "Jan", "Feb", "March", 4550 });
  14. dt.Rows.Add(new object[] { "301", "3", "1", "First", "Second", "Third", 32000 });
  15. dt.Rows.Add(new object[] { "302", "3", "1", "Test", "Test1", "Test2", 13280 });
  16. dt.Rows.Add(new object[] { "204", "2", "0", "Mon", "Tues", "Wed", 1700 });
  17. dt.Rows.Add(new object[] { "303", "3", "1", "Week1", "Week2", "Week3", 36080 });
  18. dt.Rows.Add(new object[] { "402", "4", "1", "d", "e", "f", 31500 });
  19. dt.Rows.Add(new object[] { "405", "4", "1", "July", "August", "September", 4958 });
  20. dt.Rows.Add(new object[] { "102", "1", "0", "next", "aaa", "max", 1539 });
  21. ds.Tables.Add(dt);

  22. FarPoint.Win.Spread.Data.SpreadDataBindingAdapter Sdba = new FarPoint.Win.Spread.Data.SpreadDataBindingAdapter();
  23. Sdba.DataSource = ds.Tables[0];
  24. Sdba.Spread = fpSpread1;
  25. Sdba.SheetName = fpSpread1.ActiveSheet.SheetName;
  26. Sdba.AutoGenerateRow = true;
  27. Sdba.DataAutoCellTypes = false;  
  28. Sdba.MapperInfo = new FarPoint.Win.Spread.Data.MapperInfo(2, 0, 10, 7);   
  29. Sdba.FillSpreadDataByDataSource();

复制代码
回复 使用道具 举报
fanhy
论坛元老   /  发表于:2014-9-1 09:57:00
5#
这种方式也不行!
回复 使用道具 举报
fanhy
论坛元老   /  发表于:2014-9-1 10:10:00
6#
我这个给你个测试模板你看下,发邮件你了。你用这个模板生成下数据。
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2014-9-1 19:27:00
7#
回复 6楼fanhy的帖子

抱歉,让你久等了。
我使用发送的模板制作了 Demo,导出后并没有发现有行缺失现象,请查看 Demo:

13656.zip (79.08 KB, 下载次数: 559)
回复 使用道具 举报
fanhy
论坛元老   /  发表于:2014-9-2 09:21:00
8#
你好 !

  用了你给的demo的方法试了下,发现生成的excel数据就几行,而实际中绑定的数据有几万行。还有就是公式那个sheet也没数据,是空的。
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2014-9-2 15:02:00
9#
回复 8楼fanhy的帖子

请使用以下代码测试:

  1. private void Form1_Load(object sender, EventArgs e)
  2.         {
  3.             this.fpSpread1.OpenExcel("..\\..\\excel\\FP1Temp02095626059.xls");

  4.             DataSet ds = new DataSet();
  5.             DataTable dt = default(DataTable);
  6.             dt = new DataTable();
  7.             dt.Columns.Add(new DataColumn("Number1", typeof(string)));
  8.             dt.Columns.Add(new DataColumn("Number2", typeof(string)));
  9.             dt.Columns.Add(new DataColumn("Number3", typeof(string)));
  10.             dt.Columns.Add(new DataColumn("Text1", typeof(string)));
  11.             dt.Columns.Add(new DataColumn("Text2", typeof(string)));
  12.             dt.Columns.Add(new DataColumn("Text3", typeof(string)));
  13.             dt.Columns.Add(new DataColumn("Text4", typeof(decimal)));
  14.             dt.Rows.Add(new object[] { "101", "1", "0", "Num1", "Num2", "Num3", 21000 });
  15.             dt.Rows.Add(new object[] { "201", "2", "0", "a", "b", "c", 9400 });
  16.             dt.Rows.Add(new object[] { "301", "2", "0", "Jan", "Feb", "March", 4550 });
  17.             dt.Rows.Add(new object[] { "401", "3", "1", "First", "Second", "Third", 32000 });
  18.             ds.Tables.Add(dt);

  19.             FarPoint.Win.Spread.Data.SpreadDataBindingAdapter Sdba = new FarPoint.Win.Spread.Data.SpreadDataBindingAdapter();
  20.             Sdba.DataSource = ds.Tables[0];
  21.             Sdba.Spread = fpSpread1;
  22.             Sdba.SheetName = fpSpread1.Sheets[0].SheetName;
  23.             Sdba.AutoGenerateRow = true;
  24.             Sdba.DataAutoCellTypes = false;
  25.             Sdba.MapperInfo = new FarPoint.Win.Spread.Data.MapperInfo(1, 0, 10, 7);
  26.             Sdba.FillSpreadDataByDataSource();

  27.             this.fpSpread1.Sheets[1].ColumnHeader.Cells[0, 0].Text = "自定义列头测试";
  28.         }

  29.         private void exporttoexcelToolStripMenuItem_Click(object sender, EventArgs e)
  30.         {
  31.             //超过10w行用的方法
  32.             fpSpread1.SaveExcel("test.xlsx", FarPoint.Excel.ExcelSaveFlags.UseOOXMLFormat | FarPoint.Excel.ExcelSaveFlags.SaveCustomColumnHeaders);

  33.         }
复制代码


导出 Excel 示例,可以看到“公式模板页数据是从绑定数据的第一行开始的,“101””:
test.zip (5.4 KB, 下载次数: 558)
回复 使用道具 举报
fanhy
论坛元老   /  发表于:2014-9-2 15:19:00
10#

还有有点问题

回复 9楼iceman的帖子

你好!
   这样导出的数据第二个sheet页是没问题,可是第一个sheet页的数据只有几行。原始数据是几万行,而且有两个列头.如下图:

QQ图片20140902151716.jpg

13.33 KB, 下载次数: 459

回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部