找回密码
 立即注册

QQ登录

只需一步,快速开始

gw0506
超级版主   /  发表于:2016-2-23 11:37:00
11#
有电话,我给你的邮件中有,因为是给金牌用户的,所以我不方便在这里写出来。
我们可以给你做demo,让你参考文档只是因为你的需求刚好文档里有现成的代码。

目前情况是,单独需求都ok。只是按照你的业务逻辑,先加载文件,再绑定数据,出现了问题。我们正在重现你的问题,并制作demo。你需要再等等。
当然如果你想跟我们电话沟通也没问题。你查一下我的邮件。
回复 使用道具 举报
gw0506
超级版主   /  发表于:2016-2-23 12:34:00
12#
1. 目前错误原因是fromJSON是异步的,所以把数据绑定的代码位置调整一下就好了。参见下面代码
  1.       <script type='text/javascript' charset='utf-8'>
  2.         $(document).ready(function () {                    
  3.             var spread = new GcSpread.Sheets.Spread($("#ss").get(0),{sheetCount:1});
  4.             $.ajax({
  5.                 url: "bjd1.ssjson",
  6.                 datatype: "json",
  7.                 success: function (data) {
  8.                     //here to load ssjson file.
  9.                     spread.isPaintSuspended(true);
  10.                     spread.fromJSON(JSON.parse(data));
  11.                     spread.isPaintSuspended(false);
  12.                     
  13.                     var sheet = spread.getActiveSheet();
  14.                     var person = { F_CUSTOMER: "Wang feng", F_PROJECT: "25", F_PAYMENTTERMS: "aaaaaaaa" };
  15.                     var source = new GcSpread.Sheets.CellBindingSource(person);
  16.                     sheet.setBindingPath(6, 2, "F_CUSTOMER");
  17.                     sheet.setBindingPath(7, 2, "F_PROJECT");
  18.                     sheet.setBindingPath(8, 2, "F_PAYMENTTERMS");
  19.                     sheet.setDataSource(source);
  20.                     },
  21.                 error: function (ex) {
  22.                     alert('Exception:' + ex);
  23.                 }
  24.             });
  25.         });
  26.       </script>
复制代码


2. 关于回写Sever端并保存到数据库,这看你用什么样的Server端解决方案了,SpreadJS是纯前端控件,无法支持服务端操作。
根据我们在ASP.NET技术的经验来看,你可以在前端放一个Hiden Field,然后将要回传的数据序列化成JSON串并保存在HidenField中。向Sever端Submit的时候就会将JSON串回传。
例如:
  1. var spread = GcSpread.Sheets.findControl(document.getElementById('ss'));
  2. var jsonStr = null;
  3. //export
  4. jsonStr = JSON.stringify(spread.toJSON());
复制代码


3. 关于保存成Excel文件。依赖于SpreadJS中的ExcelIO service。将这个ExcelIO Service安装到服务器上(必须是ASP.NET + IIS),然后只需要调用对应的Web Service就可以保存了。
文档有一篇在ASP.NET应用程序里导出到Excel的文章,很详尽。http://sphelp.grapecity.com/webh ... tml#excelioweb.html
核心代码如下:
前端
  1. <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="TestExcelIO_WebForm.WebForm1" %>
  2. <!DOCTYPE html>
  3. <html xmlns="http://www.w3.org/1999/xhtml">
  4. <head runat="server">
  5.     <title></title>
  6.     <!--SpreadJS Widgets JavaScript-->
  7.     <link href="css/gcspread.sheets.excel2013white.9.40.20153.0.css" rel="stylesheet" type="text/css" />
  8.     <script src="scripts/gcspread.sheets.all.9.40.20153.0.min.js" type="text/javascript"></script>
  9.     <script>
  10.         function onLoad() {
  11.             var spread = new GcSpread.Sheets.Spread(document.getElementById("ss"));
  12.             var hiddenFile = document.getElementById("HiddenField1");
  13.             if (hiddenFile &amp;&amp; hiddenFile.value !== "") {
  14.                 spread.fromJSON(JSON.parse(hiddenFile.value));
  15.             }
  16.         }
  17.         function exportExcel() {
  18.             var spread = GcSpread.Sheets.findControl(document.getElementById("ss"));
  19.             var hiddenFile2 = document.getElementById("HiddenField2");
  20.             hiddenFile2.value = JSON.stringify(spread.toJSON());
  21.         }
  22.     </script>
  23. </head>
  24. <body onload="onLoad()">
  25.     <form id="form1" runat="server">
  26.         <asp:FileUpload ID="FileUpload1" runat="server" Height="24px" Width="223px" />
  27.         <asp:Button ID="ImportBtn" runat="server" Text="Import Excel" OnClick="ImportBtn_Click" />
  28.         <asp:Button ID="ExportBtn" runat="server" Text="Export Excel" OnClick="ExportBtn_Click" OnClientClick="exportExcel()"/>
  29.         <div id="ss" style="width:100%;height:500px">
  30.             
  31.         </div>
  32.         <asp:HiddenField ID="HiddenField1" runat="server" />
  33.         <asp:HiddenField ID="HiddenField2" runat="server" />
  34.     </form>
  35. </body>
  36. </html>
复制代码


Server端
  1. protected void ImportBtn_Click(object sender, EventArgs e)
  2. {
  3.     if (this.FileUpload1.HasFile)
  4.     {
  5.         Importer excelImporter = new Importer();
  6.         this.HiddenField1.Value = excelImporter.ImportExcel(this.FileUpload1.FileContent);
  7.     }
  8. }
  9. protected void ExportBtn_Click(object sender, EventArgs e)
  10. {
  11.     if (!string.IsNullOrEmpty(this.HiddenField2.Value))
  12.     {
  13.         Exporter excelExporter = new Exporter(this.HiddenField2.Value);
  14.         excelExporter.SaveExcel(Response.OutputStream);
  15.         Response.AddHeader("content-disposition", "attachment; filename= test.xlsx");
  16.         Response.End();
  17.     }
  18. }
复制代码
回复 使用道具 举报
hardycs
注册会员   /  发表于:2016-2-23 17:16:00
13#
protected void ExportBtn_Click(object sender, EventArgs e)
{
    if (!string.IsNullOrEmpty(this.HiddenField2.Value))
    {
        Exporter excelExporter = new Exporter(this.HiddenField2.Value);
        excelExporter.SaveExcel(Response.OutputStream);
//这段怎么改为把文件导出到服务器的指定文件夹
        Response.AddHeader(&quot;content-disposition&quot;, &quot;attachment; filename= test.xlsx&quot;);
        Response.End();
    }
}
回复 使用道具 举报
gw0506
超级版主   /  发表于:2016-2-23 17:57:00
14#
Response是服务端向客户端发送的对象。不能存到本地。相关信息你可以参阅MSDN:https://msdn.microsoft.com/en-us/library/ms524327(v=vs.90).aspx

你要存服务器上,那就创建一个Stream,Exporter导出时,然后直接存到这个Stream里就好了。建议你用FileStream。不清楚的话可以查一下MSDN:https://msdn.microsoft.com/en-us/library/system.io.filestream(v=vs.110).aspx
回复 使用道具 举报
hardycs
注册会员   /  发表于:2016-2-24 08:59:00
15#
好的,谢谢,昨天已经解决。
回复 使用道具 举报
gw0506
超级版主   /  发表于:2016-2-24 09:36:00
16#
好的。那我就关闭本帖了。后续有什么问题建议你在金牌服务区发帖。
回复 使用道具 举报
12
您需要登录后才可以回帖 登录 | 立即注册
返回顶部