Tag: vb.net

Excel自动化 – 如何只说不

我正在开发一个vb.net控制台应用程序,它可以逐个打开许多电子表格,读入一对电池并closures文件。 一些电子表格有Excel在我打开文件时重新计算的公式,我收到一个对话框询问我是否想在closures电子表格时保存对该电子表格的更改。 消息:“是否要将更改保存到myfile.xls?当打开由早期版本的Excel最后保存的文件时,Microsoft Office Excel将重新计算公式” 如何自动拒绝该对话框? Dim newCBD As New CBD Dim xlApp As Excel.Application Dim xlWorkBook As Excel.Workbook Dim xlWorkSheet As Excel.Worksheet xlApp = New Excel.ApplicationClass xlWorkBook = xlApp.Workbooks.Open(myFile) xlWorkSheet = xlWorkBook.Worksheets(1) …do a bunch of junk here xlWorkBook.Close() xlApp.Quit() 谢谢!

Excel单元格alignment:例如xlLeft,xlRight或xlCenter的数值?

我一直在尝试调整Excel单元格的文本值。 我已经尝试了更常见的xlLeft , xlRight但是这似乎不起作用。 错误是xlLeft没有被声明。 我正在使用Visual Studios并使用VB创build一个aspx页面。 这是我的代码示例: Dim oExcel As Object Dim oBook As Object Dim oSheet As Object 'Start a new workbook in Excel oExcel = CreateObject("Excel.Application") oBook = oExcel.Workbooks.Add 'Add data to cells of the first worksheet in the new workbook oSheet = oBook.Worksheets(1) oSheet.Range("A1:E1").Merge() oSheet.Range("A1").Value = "Hello" oSheet.Range("A2:E2").Merge() oSheet.Range("A2").Value = "There […]

在IE浏览器中将jtable导出为ex​​cel

有很多方法可以将html表格导出为ex​​cel,但是jtable又如何,因为它不包含页面中的<table>类的html标签,所以只需要调用id <div id="table"></div> 我有简单的解决scheme,在Chrome上工作,但没有在IE上工作 导出button: <a id="dlink" onclick="tableToExcel('StudentTableContainer', 'name', 'TestExcelFile.xls')">Export to excel</a> JTable的: <div id="StudentTableContainer"></div> 使用Javascript: var tableToExcel = (function () { var uri = 'data:application/vnd.ms-excel;base64,' , template = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><!–[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines/></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]–></head><body><table>{table}</table></body></html>' , base64 = function (s) { return window.btoa(unescape(encodeURIComponent(s))) } , format = function (s, c) { return s.replace(/{(\w+)}/g, function […]

如何在Visual Studio 2010创build的Excel加载项中执行.Onkey事件?

我正在使用Visual Studio 2010创build一个Excel加载项。我想在用户单击一组键时运行一些代码。 这是我得到的代码 Public Class CC Private Sub ThisAddIn_Startup() Handles Me.Startup EnableShortCut() End Sub Sub A1() MsgBox "A1" End Sub Sub A2() MsgBox "A2" End Sub Sub A3() MsgBox "A3" End Sub Public Sub EnableShortCut() With Application .OnKey "+^{U}", "A1" 'action A1 should be performed when user clicks Ctrl + Shift + U .OnKey […]

到目前为止,使用COM对象的正确方法是什么?

这是一个非常普遍的问题,我决定提出这个问题,因为这个问题可能与今天有不同的答案。 希望这些答案将有助于理解什么是使用COM对象的正确方法。 就个人而言,在对这个问题有不同的看法后,我感到非常困惑。 过去5年来,我曾经使用COM对象,规则对我来说非常清楚: 在代码行中使用单个句点。 使用多个句点在场景后面创build不能被明确释放的临时对象。 不要使用foreach,而是使用for循环,并在每次迭代中释放每个项目 不要调用FInalReleaseComObject,而是使用ReleaseComObject。 不要使用GC释放COM对象。 GC意图主要用于debugging使用情况。 以与创build相反的顺序释放对象。 读完这些最后一行后,你们中的一些人可能会感到沮丧,这就是我如何正确地创build/释放Com Object所知道的,我希望得到的答案能够使它更加清晰和无可争议。 以下是我在这个主题上find的一些链接。 其中一些人告诉说需要调用ReleaseComObject,而其中一些则不是。 如何正确释放Excel COM对象 (2013年11月) 在.NET中释放COM对象的正确方法 (2011年8月) Marshal.ReleaseComObject认为危险 (2010年3月) ReleaseCOMObject (2004年4月) “…在VSTO场景中,你通常不需要使用ReleaseCOMObject …” MSDN – Marshal.ReleaseComObject方法 (当前的.NET Framework版本): “…您应该使用此方法释放包含引用的基础COM对象…” 更新: 这个问题被标记为太宽泛。 按照要求,我会尽量简化并提出更简单的问题。 使用COM对象时是否需要ReleaseComObject或调用GC是正确的方法? VSTO方法是否改变了我们用COM对象的方式? 我写的上面哪个规则是必需的,哪个是错的? 还有别的吗?

从OpenXml Excel文件中读取date

我想使用SharpZipLib从.xlsx文件中读取数据,将其解压缩(在内存中)并读取内部xml文件。 一切都很好,但承认date – 他们存储在julean格式,我需要以某种方式识别,如果一个数字是一个date或只有一个数字。 在另一个话题(不幸的是它死了,我需要快速的回答)我知道一些从马克·贝克的东西,但它还不够… “Excel将date存储为浮点值…整数部分是从1/1/1900(或1/1/1904取决于正在使用哪个日历)以来的天数,小数部分是一天中的比例(即时间部分)…… 1900年被认为是闰年这一事实稍微有些尴尬。 数字与数字唯一区分的是数字格式掩码。 如果您可以阅读格式掩码,则可以使用该格式将该值标识为date而不是数字,然后从基准date计算date值/格式。 “但date的属性”s“的值总是”1“吗?我知道它定义了风格,但也许?)” s属性引用styles.xml中的style xf条目,并不总是date条目1 …这一切都取决于在工作簿中使用了多less种不同的样式。 xf样式依次引用数字格式掩码。 要标识包含date的单元格,您需要执行样式xf – > numberformat查找,然后确定该numberformat掩码是否是date/时间numberformat掩码(而不是例如百分比或会计号码格式掩码) “另外一个问题 – 我现在正在查看style.xml的内容,在部分我看到像这样的元素:”<xf numFmtId =“14”… applyNumberFormat =“1”/>“,”<xf numFmtId = “1”… applyNumberFormat =“1”/>“等,但没有<numFmts>部分…有没有”标准“格式?或者我只是想念一些东西? 有人可以帮我吗? 提前致谢。

错误:<target> .ColumnName和<source> .ColumnName具有冲突的属性:DataType属性不匹配

我正在尝试使用DataTable.Merge()选项合并多个Excel文件 For Each fileName As String In Directory.GetFiles("C:\TEMP\.", "*.xls") Dim connectionString As String = String.Format("Provider=Microsoft.Jet.OLEDB.4.0; data source={0}; Extended Properties=""Excel 8.0;HDR=NO;IMEX=1;""", fileName) Dim adapter As New OleDbDataAdapter("SELECT * FROM [Sheet1$]", connectionString) Dim ds As New DataSet adapter.Fill(ds, "anyNameHere") Dim TempTable As DataTable TempTable = ds.Tables.Item("anyNameHere") table1.Merge(TempTable) MsgBox(fileName) Next DataGridView1.DataSource = table1 MsgBox(table1.Rows.Count) 但在合并时出现以下错误 <target>.ColumnName and <source>.ColumnName […]

Excel互操作阻止显示密码对话框

我正在写一个程序清理空行和列的Excel文件,我从我自己的问题开始最快速的方法来删除空行和列从Excel文件使用互操作 ,一切都很好。 问题是,我想防止excel显示密码对话框,当工作簿是密码保护,并抛出一个exception,而不是 。 我正在使用以下代码使用interop打开excel文件: m_XlApp = New Excel.Application m_XlApp.visible = False m_XlApp.DisplayAlerts = False Dim m_xlWrkbs As Excel.Workbooks = m_XlApp.Workbooks Dim m_xlWrkb As Excel.Workbook m_xlWrkb = m_xlWrkbs.Open(strFile) m_xlWrkb.DoNotPromptForConvert = true 我试图通过一个空的密码,build议一些链接 m_xlWrkb = m_xlWrkbs.Open(strFile, Password:="") 或者使用 m_xlWrkb.Unprotect("") 但没有运气。 有什么build议么?

使用Excel Interop发生的最烦人/最奇怪的事情是什么?

在使用.Net的Excel Interop开发一段时间后,我越来越讨厌有多less“奇怪的事情”发生 – 比如我之前发布的这个问题 – 我的问题 。 我很欣赏,这不是一个直接的问题,更多的是一个经验的合作,但是我认为,找出人们最大的烦恼/奇怪的事情,以及如何克服它们是有帮助的。 这样我可以找出什么问题,我可能遇到未来:) 谢谢

无法打开另一个Excel文件(当通过.net打开一个Excel时)

我devise了一个.net应用程序,它将在login时打开一个excel文件,并用它来打印报告。 注销用户时将被closures。 我为excel文件设置可见为false,以便用户不知道后台进程。 但是,如果有人在这段时间内打开任何其他的Excel文件,我的报告Excel文件变得可见,并且Excel对象被折叠。 我必须去任务pipe理器并杀死所有打开的Excel实例来解决这个问题。 码: Private Sub OK_Click(sender As Object, e As EventArgs) Handles OK.Click Try Dim dt As New DataTable() Dim Adapter As New SqlDataAdapter() ConnectMe() Dim SQLCmd As New SqlCommand("uspLogin", Con) SQLCmd.CommandType = CommandType.StoredProcedure SQLCmd.Parameters.AddWithValue("@pLoginName", UsernameTextBox.Text.Trim()) SQLCmd.Parameters.AddWithValue("@pPassword", PasswordTextBox.Text.Trim()) Adapter.SelectCommand = SQLCmd Adapter.Fill(dt) SQLCmd.Dispose() If dt.Rows.Count > 0 Then Me.Cursor = Cursors.WaitCursor Loading.Show() […]