找回密码
 立即注册

QQ登录

只需一步,快速开始

hlb77219

金牌服务用户

15

主题

44

帖子

121

积分

金牌服务用户

积分
121

活字格认证

hlb77219
金牌服务用户   /  发表于:2014-4-14 21:17  /   查看:11759  /  回复:14
你好!!!
这边存在保存Excel的问题:
1:保存后的Excel显示不对,单元格没有合并。
2:我的前台保存按钮点击只能保存一次,点击第二次就没有反应了。
3:效果图请参考下图。
4:我这个项目很急,希望得到赶紧的解决。

代码如下:
1:前台代码如下:
<asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
<div class="barContent_big">
                <asp:Button ID="btnPrintExcel" runat="server" ClientIDMode="Static" Text="保存Excel" OnClick="btnPrintExcel_Click" />
                <asp:Button ID="btnQueryCaseNum" runat="server" ClientIDMode="Static" Text="查询" OnClick="btnQueryCaseNum_Click" OnClientClick="return CaseNumCheck();" />
</div>
<div class="mainbox">
        <asp:UpdatePanel ID="UpPalQueryCaseNum" runat="server" UpdateMode="Always" RenderMode="Block">
            <ContentTemplate>
            <FarPoint:FpSpread ID="FpSpdCaseNum" runat="server" BorderColor="Black" CssClass="queryFpSpread">
                <CommandBar BackColor="Control" ButtonFaceColor="Control" ButtonHighlightColor="ControlLightLight" ButtonShadowColor="ControlDark"></CommandBar>
                <Sheets>
                    <FarPoint:SheetView SheetName="Sheet1"></FarPoint:SheetView>
                </Sheets>
            </FarPoint:FpSpread>
        </ContentTemplate>
        <Triggers>
            <asp:AsyncPostBackTrigger ControlID="btnQueryCaseNum" EventName="Click" />
        </Triggers>
    </asp:UpdatePanel>

2:后台代码如下:

----------------------------------------------------------------------------------------------------------
2.1:页面一开始的设置
     protected void Page_Load(object sender, EventArgs e)
        {
            this.FpSpdCaseNum.SaveViewStateToSession = false;
            this.FpSpdCaseNum.Sheets[0].AllowPage = false;
            MergeSchedule(true);
        }
----------------------------------------------------------------------------------------------------------
2.2:点击查询的一些数据显示样式设置
/// <summary>
        /// 设置报表的默认样式值
        /// </summary>
        public void SetFpSpdCaseNumDefaultValues()
        {
            // 默认行数
            this.FpSpdCaseNum.Sheets[0].RowCount = StartRowIndex;
            // 添加列数
            this.FpSpdCaseNum.Sheets[0].ColumnCount = CellsCount;
            //设置默认行高度
            this.FpSpdCaseNum.Sheets[0].DefaultRowHeight = 25;
            //设置默认列宽度
            this.FpSpdCaseNum.Sheets[0].DefaultColumnWidth = 95;
            //设置默认居中显示
            this.FpSpdCaseNum.Sheets[0].DefaultStyle.HorizontalAlign = HorizontalAlign.Center;
            this.FpSpdCaseNum.Sheets[0].DefaultStyle.VerticalAlign = VerticalAlign.Middle;

        }
        /// <summary>
        /// 设置报表表头信息和显示样式
        /// </summary>
        public void SetFpSpdCaseNumRowHeaderValues()
        {
            this.FpSpdCaseNum.Sheets[0].Cells[0, 0, 0, CellsCount - 1].Text = this.ddlFactory.SelectedItem.ToString();
            this.FpSpdCaseNum.Sheets[0].Rows[0].Height = 45;
            this.FpSpdCaseNum.Sheets[0].Rows[0].Font.Size = FontUnit.XLarge;
            this.FpSpdCaseNum.Sheets[0].Rows[0].Font.Bold = true;
            this.FpSpdCaseNum.Sheets[0].Rows[0].HorizontalAlign = HorizontalAlign.Left;
            this.FpSpdCaseNum.Sheets[0].Rows[0].VerticalAlign = VerticalAlign.Middle;

            this.FpSpdCaseNum.Sheets[0].Cells[1, 0, 1, 1].Text = "年份:" + this.datepicker.Text;
            this.FpSpdCaseNum.Sheets[0].Cells[1, 2, 1, CellsCount - 1].Text = "成品代码:" + this.ddlProduct.SelectedItem.ToString();
            this.FpSpdCaseNum.Sheets[0].Rows[1].Height = 36;
            this.FpSpdCaseNum.Sheets[0].Rows[1].Font.Size = FontUnit.Larger;
            this.FpSpdCaseNum.Sheets[0].Rows[1].Font.Bold = true;
            this.FpSpdCaseNum.Sheets[0].Rows[1].HorizontalAlign = HorizontalAlign.Left;
            this.FpSpdCaseNum.Sheets[0].Rows[1].VerticalAlign = VerticalAlign.Middle;

            this.FpSpdCaseNum.Sheets[0].Rows[2].BackColor = System.Drawing.Color.FromArgb(0, 176, 80);
            this.FpSpdCaseNum.Sheets[0].Rows[2].VerticalAlign = VerticalAlign.Middle;
            this.FpSpdCaseNum.Sheets[0].Rows[2].HorizontalAlign = HorizontalAlign.Center;
        }
----------------------------------------------------------------------------------------------------------
2.3:点击保存Excel按钮事件
protected void btnPrintExcel_Click(object sender, EventArgs e)
        {
            string FileName = this.ddlFactory.SelectedItem.ToString() + "-" + this.ddlProduct.SelectedItem.ToString() + ".xlsx";
            this.FpSpdCaseNum.ActiveSheetView.Protect = false;  //设置导出来之后是否只读
            this.FpSpdCaseNum.SaveExcelToResponse(Server.UrlEncode(FileName), FarPoint.Excel.ExcelSaveFlags.UseOOXMLFormat);

        }
----------------------------------------------------------------------------------------------------------
     /// <summary>
        /// 允许合并所有行
     /// </summary>
        /// <param name="fpMerge"></param>
        private void MergeSchedule(bool fpMerge)
        {
            if (fpMerge)
            {
                //Merge
                this.FpSpdCaseNum.Sheets[0].SetRowMerge(-1, FarPoint.Web.Spread.Model.MergePolicy.Always);
            }
            else
            {
                //Un-Merge
                this.FpSpdCaseNum.Sheets[0].SetRowMerge(-1, FarPoint.Web.Spread.Model.MergePolicy.None);
            }
        }
----------------------------------------------------------------------------------------------------------
3.提供图片

3.1 界面查询显示效果:
QQ截图20140414205458.png
3.2 保存Excel的显示效果
QQ截图20140414205611.png

14 个回复

倒序浏览
iceman
社区贡献组   /  发表于:2014-4-15 11:56:00
沙发
回复 1楼hlb77219的帖子

hlb77219 你好,

感谢你的问题反馈,描述的也十分详细,如果能否发个 Demo 上来就更好了。

第一个问题我重现了,可以通过AddSpanCell合并单元格,可以导出至excel,弊端是需要手动判断合并范围:

  1. this.FpSpdCaseNum.Sheets[0].AddSpanCell(0,0,1,4);
复制代码

这个问题我会反馈给产品组,看是否能够解决。

2.问题二,我并没有重现,可以尝试 debug 或者 通过 fiddler 跟踪下是否调用了后台方法。
回复 使用道具 举报
hlb77219
金牌服务用户   /  发表于:2014-4-15 13:17:00
板凳
回复 2楼iceman的帖子

你好,这边保存的Excel的上面合并的字体大小一样大,没有和我当初设置的字体大小一样
这个怎么解决啊??
代码修改后如下:
this.FpSpdCaseNum.Sheets[0].AddSpanCell(0, 0, 1, CellsCount);
            this.FpSpdCaseNum.Sheets[0].Cells[0, 0, 0, CellsCount - 1].Text = this.ddlFactory.SelectedItem.ToString();
            this.FpSpdCaseNum.Sheets[0].Rows[0].Height = 45;
            this.FpSpdCaseNum.Sheets[0].Rows[0].Font.Size = FontUnit.XLarge;
            this.FpSpdCaseNum.Sheets[0].Rows[0].Font.Bold = true;
            this.FpSpdCaseNum.Sheets[0].Rows[0].HorizontalAlign = HorizontalAlign.Left;
            this.FpSpdCaseNum.Sheets[0].Rows[0].VerticalAlign = VerticalAlign.Middle;

            this.FpSpdCaseNum.Sheets[0].AddSpanCell(1, 0, 1, 2);
            this.FpSpdCaseNum.Sheets[0].AddSpanCell(1, 2, 1, CellsCount - 2);
            this.FpSpdCaseNum.Sheets[0].Cells[1, 0, 1, 1].Text = &quot;年份:&quot; + this.datepicker.Text;
            this.FpSpdCaseNum.Sheets[0].Cells[1, 2, 1, CellsCount - 1].Text = &quot;成品代码:&quot; + this.ddlProduct.SelectedItem.ToString();
            this.FpSpdCaseNum.Sheets[0].Rows[1].Height = 32;
            this.FpSpdCaseNum.Sheets[0].Rows[1].Font.Size = FontUnit.Larger;
            this.FpSpdCaseNum.Sheets[0].Rows[1].Font.Bold = true;
            this.FpSpdCaseNum.Sheets[0].Rows[1].HorizontalAlign = HorizontalAlign.Left;
            this.FpSpdCaseNum.Sheets[0].Rows[1].VerticalAlign = VerticalAlign.Middle;
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2014-4-15 16:42:00
地板
回复 3楼hlb77219的帖子

出现问题原因是对于 Larger 字体,IE 和 Excel 标准不同。
所以我建议您通过数值来设置字体大小,例如:

  1.             this.FpSpdCaseNum.Sheets[0].Rows[1].Font.Size = 20;
复制代码
回复 使用道具 举报
hlb77219
金牌服务用户   /  发表于:2014-5-6 09:41:00
5#
你好!
保存Excel依然存在的问题,问题如下:
1、“保存Excel”按钮点击保存Excel后,我的点击“查询”按钮机没有反应了。
2、我不加 “保存Excel”按钮的时候,我的查询按钮不会出现该类问题。
3、加了“保存Excel”按钮后台如果不采用 this.FpSpdCaseNum.SaveExcelToResponse 的 方法导出Excel;点击“查询”按钮依然可以查询出数据。
4、加了“保存Excel”按钮后台采用 this.FpSpdCaseNum.SaveExcel 方法,但是没有弹出导出Excel来;点击“查询”按钮依然可以查询出数据。
5、请问这个方法是不是还需要叫什么条件或者是设置呢??

----------------------------------------------------------------------------------------
部分代码如下:
1、部分前台代码
<asp:Button ID="btnQueryCaseNum" runat="server"  Text="查  询" OnClick="btnQueryCaseNum_Click" OnClientClick="return CaseNumCheck();"  />
<asp:Button ID="btnPrintExcel" runat="server"  Text="保存Excel"  OnClick="btnPrintExcel_Click" />
2、后台点击“保存Excel”导出Excel的方法
     protected void btnPrintExcel_Click(object sender, EventArgs e)
        {
            string FileName = this.ddlFactory.SelectedItem.ToString() + "-" + this.ddlProduct.SelectedItem.ToString() + ".xlsx";
            this.FpSpdCaseNum.ActiveSheetView.Protect = false;  //设置导出来之后是否只读
            SetFpSpreadBorderSize(2);
            this.FpSpdCaseNum.SaveExcelToResponse(Server.UrlEncode(FileName), FarPoint.Excel.ExcelSaveFlags.UseOOXMLFormat);
        }
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2014-5-6 17:01:00
6#
回复 5楼hlb77219的帖子

不好意思,我没有重现这个问题,附件是我的 Demo:

12413_2.zip (3.6 MB, 下载次数: 352)
回复 使用道具 举报
hlb77219
金牌服务用户   /  发表于:2014-5-6 20:51:00
7#
回复 6楼iceman的帖子

你这个案例等于没有写嘛,导出Exce的这个SaveExcelToResponse方法,我前台界面是不会刷新的,但是弹出了下载框。
是不是向客服端Response响应有问题??
这个导出Excel是否还有其他的方法可以实现???求案例??
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2014-5-7 09:19:00
8#
回复 7楼hlb77219的帖子
刚刚拨打你的电话没有通。

前台界面不刷新,请问你是通过什么方法实现的?我通过 5# 描述没有找到相关信息。问题很有可能出现在这。

或者你可以在我的 Demo 基础上来修改,重现问题发送给我们。
回复 使用道具 举报
hlb77219
金牌服务用户   /  发表于:2014-5-7 13:56:00
9#
你好,这个是我做的Demo
测试在:项目的 Query文件夹下的 QueryCaseNum.aspx 文件
采用了微软的Ajax异步,来实现。
希望能够找出原因
附件:
SpreadForASP.NETDemo.rar (2.9 MB, 下载次数: 352)
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2014-5-7 15:12:00
10#
回复 9楼hlb77219的帖子

问题已经重现了,正在寻找解决方法
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部