首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> ASP.NET 基礎

FarPoint Spread for ASP.NET 核心操作指南:Excel 模板開啟、保存、數據綁定與前台事件全解析

     編輯:ASP.NET 基礎

前言

FarPoint Spread(現屬 GrapeCity)是 ASP.NET Web Forms 時代最強大的類 Excel 控件。本文匯總實戰高頻操作:模板開啟/保存、服務端數據填充、前台編輯事件處理、客戶端部署避坑。

1. 開啟 Excel 模板與基礎屬性配置

// 頁面初始化或按鈕事件中
FpSpread1.OpenExcel(Server.MapPath("~/Report/Template.xlsx"));

// 核心屬性設定
FpSpread1.Sheets[0].AllowPage = false;           // 禁用分頁,顯示所有行
FpSpread1.Sheets[0].AutoCalculation = true;      // 自動計算公式
FpSpread1.UseClipboard = false;                  // 禁用複製貼上(防數據洩露)
FpSpread1.Sheets[0].OperationMode = FarPoint.Web.Spread.OperationMode.RowMode; // 整行編輯模式
FpSpread1.CommandBar.Visible = false;            // 隱藏工具欄
FpSpread1.RenderCSSClass = "spread-style";       // 自定義 CSS 類

2. 保存 Excel 文件與權限問題排查

string savePath = Server.MapPath("~/Output/Result_" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".xlsx");
bool ok = FpSpread1.SaveExcel(savePath);
if (!ok)
{
    // 常見原因排查:
    // 1. IIS_IUSRS / ApplicationPoolIdentity 無寫入權限 → 給目錄授予 Modify 權限
    // 2. 缺少 fp_client 客戶端腳本資源 → 見下文部署章節
}

3. 服務端遍歷儲存格讀寫數據(核心業務邏輯)

// 開啟模板
FpSpread1.OpenExcel(Server.MapPath("~/Template/Invoice.xlsx"));
FpSpread1.Sheets[0].AllowPage = false;
FpSpread1.Sheets[0].AutoCalculation = true;

var sheet = FpSpread1.Sheets[0];

// 寫入表頭
sheet.Cells[0, 0].Text = "銷售報表";
sheet.Cells[1, 0].Text = "日期:";
sheet.Cells[1, 1].Text = DateTime.Now.ToString("yyyy-MM-dd");

// 批量填充明細行
DataTable dt = GetSalesData(); // 你的數據源
for (int row = 0; row < dt.Rows.Count; row++)
{
    int r = row + 3; // 從第4行開始
    sheet.Cells[r, 0].Text = dt.Rows[row]["ProductName"].ToString();
    sheet.Cells[r, 1].Value = Convert.ToDecimal(dt.Rows[row]["Quantity"]);
    sheet.Cells[r, 2].Value = Convert.ToDecimal(dt.Rows[row]["UnitPrice"]);
    sheet.Cells[r, 3].Formula = $"B{r+1}*C{r+1}"; // 設置公式:數量*單價
    sheet.Cells[r, 3].Locked = true; // 公式列鎖定,禁止用戶修改
}

// 設置列寬
sheet.Columns[0].Width = 300;
sheet.Columns[1].Width = 80;
sheet.Columns[2].Width = 100;
sheet.Columns[3].Width = 100;

4. 前台編輯事件處理(UpdateCommand)

用戶在瀏覽器修改儲存格後點擊「更新」按鈕觸發。

<FarPoint:FpSpread ID="FpSpread1" runat="server" OnUpdateCommand="FpSpread1_UpdateCommand" />

protected void FpSpread1_UpdateCommand(object sender, FarPoint.Web.Spread.SpreadCommandEventArgs e)
{
    // e.EditValues: 用戶修改的值集合,Key 為欄位索引
    // e.CommandArgument: 被編輯的行索引
    int editedRow = Convert.ToInt32(e.CommandArgument);
    var sheet = FpSpread1.Sheets[0];

    // 示例:若第一列為 "auto",自動填充當前時間
    if (sheet.Cells[editedRow, 0].Text == "auto")
    {
        foreach (var kv in e.EditValues)
        {
            int col = kv.Key;
            string newVal = kv.Value?.ToString();
            if (!string.IsNullOrEmpty(newVal))
            {
                sheet.Cells[editedRow, col].Text = newVal;
            }
        }
        // 自動填充時間戳
        sheet.Cells[editedRow, 4].Text = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
    }

    // 保存回 Excel 或資料庫
    FpSpread1.SaveExcel(Server.MapPath("~/Data/EditedData.xlsx"));
    // 或同步到 DB: UpdateDatabase(sheet, editedRow);
}

5. 客戶端部署關鍵:fp_client 文件夾與 Web.config

FarPoint 需要大量客戶端 JS/CSS/Image 資源(`fp_client` 目錄),否則頁面顯示空白或功能失效。

<!-- Web.config -->
<appSettings>
  <add key="fp_client" value="fp_client/" /> <!-- 相對於網站根目錄 -->
</appSettings>

部署步驟:

  1. 從 FarPoint 安裝目錄複製 `fp_client` 整個資料夾到網站根目錄(如 `C:\Inetpub\wwwroot\MyApp\fp_client\`)。
  2. 確認 IIS 對 `fp_client` 資料夾有**讀取權限**(IIS_IUSRS)。
  3. 若使用虛擬目錄/應用程式,`fp_client` 需放在**網站根目錄**,而非應用程式根目錄。

6. 常見問題速查表

現象原因解決
頁面空白/控件不顯示fp_client 路徑錯誤或權限不足檢查 Web.config `fp_client` key、IIS 權限、瀏覽器 F12 Network 404
SaveExcel 返回 false目錄寫入權限 / 文件被佔用 / 路徑不存在授權 IIS_IUSRS、確保目錄存在、避免併發寫同一文件
公式不計算AutoCalculation=false / 公式語法錯誤設 true、公式用英文逗號分隔參數、引用相對地址
編輯後數據丟失未在 UpdateCommand 回寫 Sheet / ViewState 丟失UpdateCommand 內同步 Sheet.Cells,啟用 ViewState
大數據量卡死逐儲存格寫入慢使用 `DataSource` + `DataBind()` 綁定 DataTable,或批量設值

7. 進階技巧:DataSource 綁定替代逐儲存格寫入

// 適用於純數據展示、無複雜公式/合併儲存格的場景
DataTable dt = GetReportData();
FpSpread1.DataSource = dt;
FpSpread1.DataBind(); // 自動生成列、填充數據

// 綁定後可微調
FpSpread1.Sheets[0].Columns["Price"].Format = "C2"; // 貨幣格式
FpSpread1.Sheets[0].Columns["Date"].Format = "yyyy-MM-dd";

總結

FarPoint Spread 核心工作流:
OpenExcel → 配置 Sheet 屬性 → 服務端填充數據/公式 → 前台編輯 UpdateCommand 回寫 → SaveExcel / 同步 DB
關鍵成功因素:`fp_client` 正確部署、目錄權限、大數據用 `DataSource` 綁定、公式列鎖定保護。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved