【问题标题】:Excel export issueExcel导出问题
【发布时间】:2014-01-24 06:07:35
【问题描述】:

我正在从 asp.net 填写我的 excel 表,但在 Excel 中我收到错误和不正确的值

错误:

小心,我们在您的工作簿中发现了一个或多个循环引用,这可能会导致您的公式计算不正确。

代码:

public class HomeController : Controller
    {
        public ActionResult Index()
        {
            ViewBag.Message = "Precise Technology Consultants";
            var DataContext = new EmployeeAtdDataContext();
            //var EmployeeAtd = DataContext.GetAttendance_Sp();
            IEnumerable<GetAtdRecord_SpResult> EmployeeAtd = DataContext.GetAtdRecord_Sp(null).ToList();
            var names = (from n in DataContext.EmployeeAtds select n).Distinct();
            ViewData["EmplID"] = new SelectList(names, "EmplID", "EmplName");
            return View(EmployeeAtd);

        }

        public ActionResult About()
        {
            return View();
        }

        public ActionResult ToExcel()
        {
            var DataContext = new EmployeeAtdDataContext();

            var grid = new GridView();
            grid.DataSource = DataContext.GetAtdRecord_Sp(null).ToList();
            grid.DataBind();

            Response.ClearContent();
            Response.Buffer = true;
            Response.AddHeader("content-disposition", "attachment; filename=AttendanceSheet.xls");
            Response.ContentType = "application/ms-excel";

            Response.Charset = "";
            StringWriter sw = new StringWriter();
            System.Web.UI.HtmlTextWriter htw = new System.Web.UI.HtmlTextWriter(sw);

            grid.RenderControl(htw);

            Response.Output.Write(sw.ToString());
            Response.Flush();
            Response.End();
            return RedirectToAction("Index");
        }

SQL 查询:

WITH Times AS
(   SELECT  emp.EmplID, 
            emp.EmplName,
            InTime = MIN(atd.RecTime),
            OutTime = MAX(atd.RecTime),
            TimeWorked = DATEDIFF(MINUTE, MIN(atd.RecTime), MAX(atd.RecTime)),
            OverTime = DATEDIFF(MINUTE, MIN(atd.RecTime), MAX(atd.RecTime)) - 480,
            [DateVisited] = atd.RecDate
    FROM    AtdRecord atd 
            INNER JOIN HrEmployee emp 
                ON atd.EmplID = emp.EmplID 
    GROUP BY emp.EmplID, emp.EmplName, atd.RecDate
    HAVING COUNT(atd.RecTime) > 1
)
SELECT  t.EmplID,
        t.EmplName,
        t.InTime,
        t.OutTime,
        t.DateVisited,

        TimeWorked = CONVERT(CHAR(5), DATEADD(MINUTE, t.TimeWorked, 0), 8),
        OverTime = CASE WHEN t.OverTime < 0 THEN '-' ELSE '' END +
                                CONVERT(CHAR(5), DATEADD(MINUTE, ABS(t.OverTime), 0), 8)
FROM    Times t

使用 MVC 3 和 linq to sql

检查最后一列,超时,ti 应该显示一个值,例如-07:27 但事实并非如此

【问题讨论】:

  • 从 Excel 中对循环引用进行故障排除。它有工具可以做到这一点。使用它们。
  • 我做到了,但它暂时删除了这一点,我不希望客户或用户经历这一切,必须有办法解决它
  • 这个想法是通过使用 Excel 检查循环引用来识别它。现在您知道哪个单元格是问题所在。然后返回您的代码并在那里解决问题。
  • 整个栏目有问题,OVERTIME栏目
  • 我猜这个查询引起了问题,在此之前我使用了另一个可以正常工作并且数据传输完美的查询,但是由于我使用了这个查询(它最后有字符连接)它导致了问题

标签: sql asp.net-mvc visual-studio-2010 excel c#-4.0


【解决方案1】:

Excel 中的循环引用总是由公式引起的。使用 Excel 提供的工具查找包含循环引用的单元格。然后深入到问题单元格中的公式引用并解决所有引用,直到找到循环引用的原因。

【讨论】:

  • 妈妈,其实我不知道如何在单元格上找到特定的公式
  • 如果Excel单元格中有公式,它可能引用其他单元格。并且这些其他单元格可以指代其他单元格。在对单元格的引用链中的某处可能存在循环引用。只需按照引用并用你的大脑来识别循环引用。如果您不知道 Excel 是如何工作的,您如何编写创建 Excel 文件的应用程序?
猜你喜欢
  • 2012-04-10
  • 1970-01-01
  • 1970-01-01
  • 2023-03-19
  • 1970-01-01
  • 2021-05-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多