Open Source - 在线Office方案

在这里插入图片描述


纯前端实现

纯前端js的实现excel在线查看编辑, 目前主要的几个开源项目有

Luckysheet : https://gitee.com/mengshukeji/Luckysheet

x-sheet: https://gitee.com/eigi/x-sheet


Java实现

基于模板的word生成 .

docx4j:


poi-tl:


综合类

实现word、excel、ppt等格式的在线预览。

kkFileView为文件文档在线预览解决方案,该项目使用流行的spring boot搭建,易上手和部署,基本支持主流办公文档的在线预览,如doc,docx,xls,xlsx,ppt,pptx,pdf,txt,zip,rar,图片,视频,音频等等。

其技术方案是将office文件利用OpenOffice或LibreOffice转换为pdf实现在线预览。

只能实现预览,不能在线编辑


浏览器插件

pageoffice , 客户端需要安装office或wps


商业版本

主要是onlyoffice,社区版免费使用,商业收费版本。

功能强大,支持word、excel、ppt等文件的在线编辑、预览、协同等功能

在这里插入图片描述

Apache OpenOffice(原称 OpenOffice.org)是一套开放原始码的办公软件,可以在多种作业系统上运作。预设的档案交换格式是已经成为 ISO 标准的开放文档格式(ODF,OpenDocument Format),此外也支持 Microsoft Office 97 至 2016 的文档格式,以及其余常见的文件文档。软件通常称为「OpenOffice」或简称「OO.o」,但因为商标的争议,正规的叫法是「OpenOffice.org」。直至2012年,正式更名为 Apache OpenOffice,目前最新版本为4.1.9。 开源免费 Office 办公软件 OpenOffice 中文版开源免费 Office 办公软件 OpenOffice 中文版 Apache OpenOffice 是一款办公软件,引导文字处理、电子表格、幻灯片演示、图形处理、数据库工具以及支持更多功能的开源的 Office 办公套件。该软件支持多国语言并且可以在所有普通PC电脑上正常工作。Apache OpenOffice 以一种国际开放标准的文件名格式保存个人的数据,同样也支持其他的普通软件厂商出品的 Office 办公套件的读取和写入。而这一切的功能使用都是免费授权的。 penOffice.org 是一套跨平台的办公室软件套件,能在 Windows、Linux、MacOS X (X11)、和 Solaris 等操作系统上执行。它与各个主要的办公室软件套件兼容。OpenOffice.org 是自由软件,任何人都可以免费下载、使用、及推广它。OpenOffice.org 的主要模块有Writer(文本文档)/Calc(电子表格)/Impress(演示文稿)/Math(公式计算)/Draw(画图)/Base(数据 库) OpenOffice.org 不仅是六大组件的组合,而且与同类产品不同的是,本套件不是独立软件模块形式创建的,从一开始,它就被设计成一个完整的办公软件包。 所有的包有类似的外观,易于使用,如“样式”等“一次学会到处使用”的工具。OpenOffice.org 保持与您的电脑类似的外观——您一旦改变您的桌面,OpenOffice.org 也会相应改变。 组件间的相同工具用法相同——例如, Writer 里面使用的绘图工具在 Impress 和 Draw 里面您也能用到。 您不必知道哪个应用程序用于创建哪个特殊文件——您使用“文件”就可以“打开”任何 OpenOffice.org 文件,正确的应用程序将会运行。 所有的包共享一个拼写检查工具,如果您改变一个组件包里面的“选项”,在其他组件包里也会同时改变。 所有组件间资料可以轻松转移。 所有的组件文件可储存为 OpenDocument 格式(新的办公文档国际标准),这种基于 XML 的格式相比同类产品的格式,磁盘存储更合理,任何兼容 OpenDocument 标准的软件均可以访问您的数据。 使用安装程序,所有组件可以一次性安装。 所有发布的版本都基于相同的开放许可证——没有隐性费用。
'------------------------------------------------------------------+ ' Module specification '------------------------------------------------------------------+ ' ' Module Name : ExpWStoQL ' ' Copyright : Yokogawa SCE, 2004 ' ' Author : Jan Worst ' ' Description : Export Worksheet to Quickload file ' ' '------------------------------------------------------------------+ ' Changes .... '------------------------------------------------------------------+ ' Who When Change What '------------------------------------------------------------------+ ' WST Jun-04 exxxx FAST/TOOLS to Excel demo ' WST Oct-05 Add comment column (starting with "#") '------------------------------------------------------------------+ Option Explicit Dim qldws As New qldWorkSheet Dim myWS As New Excel.Worksheet Dim wsAbs As wsAbstract Dim ColInstall As Integer Dim ColUnit As Integer Dim ColTag As Integer Dim ColSub As Integer Dim ColGroupName As Integer Dim ComposedKey As Boolean ' Indicates NAME field missing Dim colQldFields As Collection Dim ColSelected(256) As Boolean ' Shows if column must be exported Dim wsM As WsMacros Public Sub ExpWStoQL(ws As Excel.Worksheet, _ qlFile As String, _ Append As Boolean, _ SelectedRowsOnly As Boolean, _ SelectedColumnsOnly As Boolean, _ WriteDummyLines As Boolean) Dim Row As Long Dim i As Long Dim Column As Integer Application.ScreenUpdating = False qldws.Initialize ws Set myWS = ws Set wsM = New WsMacros Set wsAbs = New wsAbstract wsAbs.Initialize ws '---------------------------------------------------------- ' Open Quickload file '---------------------------------------------------------- If Append Then Open qlFile For Append As #1 Else Open qlFile For Output As #1 End If On Error GoTo ExportError Print #1, "!-----------------------------------------------------------------------" Print #1, "! Quickload file : " & qlFile Print #1, "! From workbook : " & ActiveWorkbook.FullName Print #1, "! Sheet : " & ActiveSheet.Name Print #1, "! Generated : " & FormatDateTime(Now, vbLongDate) & " " & _ FormatDateTime(Now, vbLongTime) Print #1, "! By : " & Environ("username") & "@" & Environ("computername") Print #1, "!-----------------------------------------------------------------------" Print #1, "" '---------------------------------------------------------- ' Write text "@FIELDS" '---------------------------------------------------------- Print #1, "@FIELDS" '---------------------------------------------------------- ' Check if key (NAME) field must bo composed from ' fields INSTALL, UNIT, TAG, SUB '---------------------------------------------------------- GetQuickloadFields SelectedColumnsOnly '---------------------------------------------------------- ' Write Recordset Fields '---------------------------------------------------------- Dim FirstColumnWritten As Boolean For i = 1 To colQldFields.count If Left$(colQldFields.Item(i), 1) <> "#" Then ' not a comment column If FirstColumnWritten = False Then FirstColumnWritten = True Else Print #1, ", "; End If PrintHeaderMacro colQldFields.Item(i), qldws.RowDataHeader End If Next i '---------------------------------------------------------- ' Write text "@<dataset name>" '---------------------------------------------------------- Print #1, "" Print #1, "@" & qldws.DatasetName '---------------------------------------------------------- ' Write all records ' (do not write rows that are hidden by the "Excel Autofilter" '---------------------------------------------------------- For Row = qldws.RowDataFirst To qldws.RowDataLast If Not SelectedRowsOnly Or wsAbs.RowSelected(Row) Then OneRow Row, SelectedColumnsOnly ElseIf WriteDummyLines Then Print #1, " " End If Next Row '---------------------------------------------------------- ' Close Quickload file '---------------------------------------------------------- Print #1, "" Close #1 Set qldws = Nothing Set wsM = Nothing Application.ScreenUpdating = True Set wsAbs = Nothing Exit Sub ExportError: Close #1 Application.ScreenUpdating = True Set wsM = Nothing Set qldws = Nothing Set wsAbs = Nothing ' propagate error Err.Raise Err.Number, Err.Source, Err.Description, Err.HelpFile, Err.HelpContext End Sub '---------------------------------------------------------- ' Write one row '---------------------------------------------------------- Private Sub OneRow(Row As Long, SelectedColumnsOnly As Boolean) Dim FirstColumnWritten As Boolean Dim Column As Integer Dim ws As Worksheet Set ws = qldws.Worksheet FirstColumnWritten = False '----------------------------------------- ' Write composed key field '----------------------------------------- If ComposedKey Then PrintFieldMacro "", qldws.getKeyValue(Row), Row FirstColumnWritten = True End If '----------------------------------------- ' Write composed key field '----------------------------------------- For Column = 1 To qldws.ColumnCount ' Debug.Print Column, ws.Cells(qldws.RowDataHeader, Column), ws.Cells(Row, Column), Row If Left$(ws.Cells(qldws.RowDataHeader, Column), 1) <> "#" Then ' not a comment column ' If Not SelectedColumnsOnly Or _ ' (SelectedColumnsOnly And _ ' Not Intersect(Selection, myWs.Cells(qldws.RowDataHeader, Column)) Is Nothing) Then If ColSelected(Column) Then If (Not ComposedKey Or ( _ ComposedKey And _ qldws.IsSplitNameField(ws.Cells(qldws.RowDataHeader, Column)) = False And _ UCase$(ws.Cells(qldws.RowDataHeader, Column)) <> "NAME")) Then If FirstColumnWritten = False Then FirstColumnWritten = True Else Print #1, ", "; End If PrintFieldMacro ws.Cells(qldws.RowDataHeader, Column), ws.Cells(Row, Column), Row End If End If End If Next Column Print #1, "" End Sub '---------------------------------------------------------- ' Evaluate Header macro '---------------------------------------------------------- Private Sub PrintHeaderMacro(ByVal CellContents As String, Row As Long) CellContents = Trim$(CellContents) If Left$(CellContents, 1) = "$" Then Dim i As Integer On Error GoTo HeaderMacroNotFound With wsM.HeaderMacro(CellContents) For i = 1 To .FieldCount Print #1, .Field(i); If i <> .FieldCount Then Print #1, ", "; End If Next i End With Else If CellContents = "<none>" Then CellContents = "" Print #1, CellContents; End If Exit Sub HeaderMacroNotFound: On Error GoTo ItemNameMacroNotFound Print #1, wsM.ItemNameMacro(CellContents).Field; Exit Sub ItemNameMacroNotFound: ' Throw error Err.Raise Err.Number, Err.Source, _ Err.Description & vbCrLf & vbCrLf & "Cannot evaluate macro" & CellContents, _ Err.HelpFile, Err.HelpContext End Sub '---------------------------------------------------------- ' Evaluate Field macro '---------------------------------------------------------- Private Sub PrintFieldMacro(HeaderMacroName As String, ByVal CellContents As String, Row As Long) CellContents = Trim$(CellContents) If Left$(CellContents, 1) = "$" Then Dim i As Integer On Error GoTo HeaderMacroNotFound With wsM.HeaderMacro(HeaderMacroName).FieldMacro(CellContents) For i = 1 To .FieldCount Print #1, """" & .Field(i) & """"; If i <> .FieldCount Then Print #1, ", "; End If Next i End With Else If CellContents = "<none>" Then CellContents = "" Print #1, """" & CellContents & """"; End If Exit Sub HeaderMacroNotFound: On Error GoTo ItemNameMacroNotFound Print #1, """" & CellContents & """"; Exit Sub ItemNameMacroNotFound: ' Throw error Err.Raise Err.Number, Err.Source, _ Err.Description & vbCrLf & vbCrLf & "Cannot evaluate macro" & CellContents, _ Err.HelpFile, Err.HelpContext End Sub '-------------------------------------------------------------------- ' Get quickload field names ' normally they correspond with the Excel header fields, exceptions are ' made for "composed keys" for UNIT_DF, ITEM_DEF, etc. ' ' Outputs: ComposedKey - indicates that key is composed ' colQldFields - collection of fields written to Quickload file ' '-------------------------------------------------------------------- Private Sub GetQuickloadFields(SelectedColumnsOnly As Boolean) Set colQldFields = New Collection ComposedKey = True ' assume True Dim col As Long '---------------------------------------------------------- ' Check if key (NAME) field must bo composed from ' fields INSTALL, UNIT, TAG, SUB '---------------------------------------------------------- ComposedKey = qldws.hasSplitName ColInstall = qldws.ColFieldName("INSTALL") ColUnit = qldws.ColFieldName("UNIT") ColTag = qldws.ColFieldName("TAG") ColSub = qldws.ColFieldName("SUB") ColGroupName = qldws.ColFieldName("GROUP_NAME") '---------------------------------------------------------- ' Fill Fields collection '---------------------------------------------------------- If ComposedKey Then colQldFields.Add "NAME" End If Dim FieldContents As String Dim R As Range For col = 1 To qldws.ColumnCount ' Find out about selected columns FieldContents = "" ColSelected(col) = True If SelectedColumnsOnly Then Set R = Intersect(Selection, myWS.Cells(qldws.RowDataHeader, col)) If R Is Nothing Then FieldContents = "#" ' fake commment column ColSelected(col) = False End If End If FieldContents = FieldContents & UCase$(qldws.Worksheet.Cells(qldws.RowDataHeader, col)) If ComposedKey Then If col <> ColInstall And _ col <> ColUnit And _ col <> ColTag And _ col <> ColSub And _ col <> ColGroupName Then colQldFields.Add FieldContents End If Else colQldFields.Add FieldContents End If Next col End Sub '--------------------------------------- ' Read Shift-JIS and Write UTF-8N '--------------------------------------- Public Sub WriteUTF8N(strFilename As String) Dim objReadStream As Object Dim objWriteStream As Object Dim bytData() As Byte Const adTypeText = 2 Const adTypeBinary = 1 Const adReadLine = -2 Const adWriteLine = 1 Const adCRLF = -1 Const adSaveCreateOverWrite = 2 Set objReadStream = CreateObject("ADODB.Stream") Set objWriteStream = CreateObject("ADODB.Stream") With objReadStream .Open .Type = adTypeText .Charset = "GB2312" .LineSeparator = adCRLF .LoadFromFile strFilename End With With objWriteStream .Open .Type = adTypeText .Charset = "UTF-8" .LineSeparator = adCRLF End With Do Until objReadStream.EOS objWriteStream.WriteText objReadStream.ReadText(adReadLine), adWriteLine Loop objReadStream.Close With objWriteStream .Position = 0 .Type = adTypeBinary .Position = 3 bytData = .Read .Close .Open .Position = 0 .Type = adTypeBinary .Write bytData .SaveToFile strFilename, adSaveCreateOverWrite ' .SaveToFile strFilename & ".txt", adSaveCreateOverWrite .Close End With End Sub 用VS编写C#程序
最新发布
05-17
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小小工匠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值