OnlyOffice使用指南(编辑Excel文件)

1.基于docker启动服务,详细步骤

https://blog.csdn.net/qq_44163117/article/details/133761652

 

启动之后可以看到

 

2.设置网格不可编辑

onlyoffice设置部分无法编辑
答:1.把Excel表里的所有单元格,都变成未锁定(Ctrl+1 ——> 单元格属性——>锁定的勾去掉)
2.把你希望不让别人编辑的单元格,变成:锁定
3.审阅——>保护工作表 ——>把选定:锁定单元格的勾去掉 成功。

 

3.下载网站示例源码

 https://www.onlyoffice.com/download-docs.aspx?from=default#docs-community

选择

 

 4.修改项目路径

settings.config里面修改 自己的地址

 

4.设定 手动点击保存会触发回调

在DocEditor.aspx.cs里面,下图位置改为true

 

5.操作时的状态

每次操作onlyoffice都会有一个状态,比如手动保存会触发MustForceSave状态

DocEditor.aspx里面声明了回传的地址CallBackUrl

 回传的请求会传送到WebEditor.ashx.cs里面处理

ProcessRequest会根据传入的类型调用方法

手动保存的时候会触发Track方法

 代码:

                    var my = fileData;
                    var downloadUri = (string)fileData["url"];
                    //从返回的路径读取文件里面的内容
                    SaveToOrcl(downloadUri,context);

保存到数据库

private static void SaveToOrcl(string url,HttpContext context)
        {
            int cell1 = 0;
            int cell2 = 0;
            double cell3 = 0;
            double cell4 = 0;
            string cell5 = "";

            //读取值
            var bytes=GetBytes(url);
            using (MemoryStream stream = new MemoryStream(bytes))
            {
                ExcelPackage.LicenseContext = LicenseContext.NonCommercial;
                using (ExcelPackage package = new ExcelPackage(stream))
                {
                    ExcelWorksheet worksheet = package.Workbook.Worksheets[0]; // 假设你要读取第一个工作表

                    // EPPlus的行和列索引都是从1开始的
                    cell1 = int.Parse(worksheet.Cells[2, 6].Value.ToString());
                    cell2 = int.Parse(worksheet.Cells[5, 6].Value.ToString());
                    cell3 = Math.Round(double.Parse(worksheet.Cells[6, 6].Value.ToString()),1);
                    cell4 = Math.Round(double.Parse(worksheet.Cells[7, 6].Value.ToString()), 1);
                    cell5 = worksheet.Cells[4, 7].Value.ToString();
                }
            }

            string connStr = "Data Source=127.0.0.1:1521/orcl; User Id=adu; Password=123456;";
            //保存到数据库
            OracleConnectionClass conn = new OracleConnectionClass(connStr);
            var table=conn.ExecuteQuery("select * from TableData where TrackLength=" + cell1);
            //插入数据库
            string sql = "";
            if (table.Rows.Count > 0)
            {
                sql = $"update TableData set TrackLength={cell1},StealCount={cell2},MinSpan={cell3},PlatLength={cell4} where Id='{table.Rows[0]["Id"]}'";
            }
            else
            {
                sql = $"insert into TableData(Id,TrackLength,StealCount,MinSpan,PlatLength) values (sys_guid(),{cell1},{cell2},{cell3},{cell4})";
            }          
            conn.ExecuteNonQuery(sql);

            //保存到word
            SaveToDocker(context,cell5);
        }

保存文件到docker,在Default.aspx.cs

//上传word到docker服务器
        public static string DoUpload(string content,string fileName, HttpContext context)
        {
            var curExt = (Path.GetExtension(fileName) ?? "").ToLower();
            if (!FileExts.Contains(curExt))  // check if the file extension is supported by the editor
            {
                throw new Exception("File type is not supported");
            }

            fileName = GetCorrectName(fileName);  // get the correct file name if such a name already exists

            //保留本地IIS
            var savedFileName = StoragePath(fileName, null);  // get the storage path to the uploading file

            // 创建一个新的 Word 文档
            XWPFDocument document = new XWPFDocument();
            // 添加一个段落
            XWPFParagraph paragraph = document.CreateParagraph();
            XWPFRun run = paragraph.CreateRun();
            run.SetText(content);
            // 保存文档到本地
            using (FileStream stream = new FileStream(savedFileName, FileMode.Create, FileAccess.Write))
            {
                document.Write(stream);
            }

            // get file meta information or create the default one
            var id = context.Request.Cookies.GetOrDefault("uid", null);
            var user = Users.getUser(id);  // get the user
            DocEditor.CreateMeta(fileName, user.id, user.name, null);

            return fileName;
        }

 

posted @ 2024-03-19 10:02  RookieCoderAdu  阅读(3385)  评论(0)    收藏  举报