作業需要常常用EXCEL做價格表給下游廠商做參考 如題該如何優化
上游廠商常常每半個月(或一個月)給新資料 但數量繁多
一個廠牌大約一個EXCEL檔 其中一個EXCEL裡面會有各系列的Sheet
我想知道的事是否有類似SQL資料庫UPDATE語言的函數或方法來更新資料
附圖舉例假如本月7月價格如下
而上游廠商8月希望某幾樣商品價格如sheet2
因為下游廠商是傳統產業 目前做法是用印商品冊一本一本發
未來是想用SQL資料庫來單獨維護售價 再用python視覺化效果
針對此想聽聽各方意見
目前問題先解決EXCEL如何達成那樣的效果
1、讓下游廠商進你們的網站下載新的EXCEL報表,報表內容以程式產生,目前常見的網頁後端語言都有免費的EXCEL庫可用(而且不用在伺服器上安裝OFFICE),像PHP的PHPExcel,C#的Epplus,Python的Openpyxl.................
2、學證券公司用DDE
這是我寫的範例....網頁版九九乘法表DEMO
(資料庫的事由你自行去發揮)
#nuget epplus
using OfficeOpenXml;
using System;
using System.Drawing;
public partial class csexcel_Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
Response.Clear();
ExcelPackage ep = new ExcelPackage();
ExcelWorksheet ews = ep.Workbook.Worksheets.Add("測試");
ews.Cells.Style.Font.Size = 20; //預設字體大小
ews.Cells.Style.Font.Name = "細明體";//細明體為等寬字體,這樣排起來較好看
for (int x = 1; x <= 9; x++)
{
for (int y = 1; y <= 9; y++)
{
ews.Cells[y, x].Value = x * y;
}
}
// 表格乘數著底色....黃
ews.Cells[1, 1, 1, 9].Style.Fill.PatternType = OfficeOpenXml.Style.ExcelFillStyle.Solid;
ews.Cells[1, 1, 1, 9].Style.Fill.BackgroundColor.SetColor(Color.Yellow);
// 表格被乘數著底色....黃
ews.Cells[1, 1, 9, 1].Style.Fill.PatternType = OfficeOpenXml.Style.ExcelFillStyle.Solid;
ews.Cells[1, 1, 9, 1].Style.Fill.BackgroundColor.SetColor(Color.Yellow);
//網頁輸出
byte[] respdata = ep.GetAsByteArray();
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
Response.AddHeader("content-length", respdata.Length.ToString());
Response.AddHeader("content-disposition", "attachment; filename=九九乘法表" + DateTime.Now.Ticks.ToString() + ".xlsx");
Response.BinaryWrite(respdata);
Response.Flush();
Response.End();
}
}
我不愛用VBA的問題有3
1、安全性疑慮..現在的新版OFFICE會預設封鎖VBA
2、版本支援....要是有人用的是OFFICE2003,你們的卻是2013甚至更高,會有極大的機率無法執行
3、只要他們編輯巨集,你們公司的資料不就被人看光光?
感謝撥空回答 事情是這樣的 您提到的對我來說是STEP2的部分
因為資料庫還是舊的資料 所以要更新資料才能產生新的EXCEL報表
STEP1是卡在 每半個月需要重複 更新500~1500筆不等的資料
且資料分散在各廠商EXCEL的各Sheet中
如何有效整合這些初始資料是目前問題
目前想法是如何用CSV來更新SQL 但各廠商給的初始資料凌亂
如果上游廠商能整合的話就方便許多
且下游廠商是真的傳統老店到要請他們上網下載資料 會到困難的地步
不過大致上有方向了 感謝
外加一個不愛VBA的原因: 效能奇差,跑個1000行要花掉幾十秒,OMG
dexterkuo
用排程跑個程式固定時間產生一份專供EXCEL用的TABLE嘛...每天跑一次或一周跑一次,再舊的資料都能整理的出來吧?
還是老話一句,如果你讓下游廠商自行用SQL更新EXCEL裡的資料,太危險!撇開1433不談,光是你把ConnectionString存在EXCEL的VBA裡,就是一件可怕的事,估且不論你們有沒有設定一個足夠小的權限給他們連,但1433暴露在外,就難以避免DDoS網路阻絕攻擊的發生.......
你想冒這險?
小小建議是全部都用PYTHON搞定就好,廠商只需要幫你把他們的EXCEL提供給你
流程可以是excel>phyhon >pandas >pandas.to_sql>SQL process
我想知道的事是否有類似SQL資料庫UPDATE語言的函數或方法來更新資料
我的答案是「沒有」
如果是我的話
只會在價格主檔裡寫 VBA
讀上游廠商提供的更新價格
然後去更新價格主檔裡的資料