Tag: c#

如何在Excel中使用OLEDB获得只有excel工作表名称的列表; 过滤出在元数据中显示的非工作表

我有一个使用OLEDB从Excel电子表格中获取工作表名称的问题。 问题是,当我使用GetOleDbSchemaTable时,生成的DataTable不仅仅是实际的工作表名称; 它有额外的“表”,我只能假设由Excel内部使用的行。 例如,如果我有一个名为myWorksheet的工作表,下面的代码最终可能会包含一个包含myWorksheet $,myWorksheet $ PrintTable和myWorksheet $ _的列表。 只有第一个myWorksheet $logging是实际的工作表。 其他人只是垃圾,我不需要。 在元数据中查看它们时,它们看起来就像常规表一样,即使使用TABLEtypes也是如此。 现在我只是用名字“$ _”或者“$ Print”手动过滤掉了所有的东西,但是谁知道Excel的其他function可能会使这些额外的logging以不同的格式出现。 有谁知道只有实际的工作表名称的最佳方式,而不是这些不是工作表的内部表? 元数据中是否有东西可以区分它们? private ArrayList getXlsWorksheetNames(OleDb.OleDbConnection conn) { ArrayList wsList = new ArrayList(); DataTable schemaTable; try { conn.Open(); schemaTable = conn.GetOleDbSchemaTable(OleDb.OleDbSchemaGuid.Tables, null); foreach (DataRow row in schemaTable.Rows) { //form.appendToResultsTxt("Adding worksheet to list: " + Environment.NewLine + // "Name = " […]

如何判断何时在VBA窗口中

我正在C#.net工作,基本上我希望我的插件能够告诉用户是否保存,保存来自Excel本身,或者如果保存来自“Visual Basic for Application”窗口。 有没有办法来判断用户当前是否在“Microsoft Visual Basic for Application”中? 编辑:我不知道这是一个完整的教授解决scheme,但我发现.Application.ActiveWindow.ActiveSheet == null似乎工作。

如何将操作推送到Excel撤消堆栈?

我正在构build一个处理多个单元格值的VSTO Excel加载项。 我想允许用户通过标准的Excelfunction撤消和重做由加载项创build的更改。 我宁愿避免使用VBA。 这可能吗? 如果是这样,怎么样? 另一个问题:是否可以检查现有的撤销/重做堆栈?

C#/ Excel:在图表上处理最大系列大小

我需要编程方式帮助绘制比单个Excel系列更多的点。 根据http://office.microsoft.com/en-us/excel/HP100738491033.aspx在Excel 2007图表上可显示的最大点数是256000.考虑到每个系列在32000点上限,需要8个系列绘制完整的256000点。 由于我们使用的大型数据集,我的客户需要绘制每个图表的最大点数。 我对C#/ Excel interop有适度的经验,所以我认为可以很容易地编程创build一个工作表,然后循环遍历每一组32000点,并将它们作为一个系列添加到图中,当数据完全绘制时停止或8个系列被绘制。 如果着色正确,8系列将在一个系列视觉上难以区分。 不幸的是我在这里。 我遇到的主要问题是: (全尺寸) 在二维图表的数据系列中,您可以使用的最大数据点数量为32,000 … http://img14.imageshack.us/img14/9630/errormessagen.png 奇怪的是,这个popup窗口出现在执行该行时: chart.ChartType = chartType(其中chartType是xlXYScatterLines)http://img2.imageshack.us/img2/2413/linean.png 并伴随着: 来自HRESULT的exception:0x800AC472 http://img21.imageshack.us/img21/5153/exceptionb.png 我甚至不明白在我甚至指定要绘制数据之前,我怎么会产生这样的popup/警告/exception。 Excel试图在这里很聪明吗? 作为一个临时解决方法,我已经把chart.ChartType = chartType语句放到try-catch块中,这样我就可以继续下去了。 如下所示,我的“块”代码正在按预期工作,但在将数据添加到graphics时仍然遇到同样的问题。 Excel表示,我试图绘制太多点,当我清楚我不是。 ( 全尺寸图片 ) 带监视窗口的代码块http://img12.imageshack.us/img12/5360/snippet.png 我知道我可能没有正确的与每个系列相关的X值,但是我试图在我走得更远之前得到这个工作。 任何帮助将不胜感激。 以下是完整的代码: public void DrawScatterGraph(string xColumnLetter, string yColumnLetterStart, string yColumnLetterStop, string xAxisLabel, string yAxisLabel, string chartTitle, Microsoft.Office.Interop.Excel.XlChartType chartType, bool includeTrendline, bool includeLegend) […]

如何使用LINQ to Entity将数据导出到Excel?

我的数据来自我的ASP.NET页面上的实体数据模型表。 现在,我必须将这些数据导出到button单击的Excel中。 如果使用的是OLEDB,则直接显示在这里: http : //csharp.net-informations.com/excel/csharp-excel-oledb-insert.htm 这里是我的function从查询表中读取数据: var model = from i in myEntity.Inquiries where i.User_Id == 5 orderby i.TX_Id descending select new { RequestID = i.TX_Id, CustomerName = i.CustomerMaster.FirstName, RequestDate = i.RequestDate, Email = i.CustomerMaster.MS_Id, DocDescription = i.Document.Description, ProductName = i.Product.Name

Excel interop在Office 2007的机器上工作,但在Office 2010的机器上失败

我有一个C#WPF(.NET 4.0)应用程序使用Excel互操作来从Excel文件中读取数据。 当我在我的开发机器上运行这个应用程序,它有Excel 2007,它工作正常。 当我在其上安装了Excel 2010的另一台计算机上运行它时,失败,并显示以下错误消息: System.Runtime.InteropServices.COMException(0x80040154):由于以下错误,检索具有CLSID {00024500-0000-0000-C000-000000000046}的组件的COM类工厂失败:80040154类未注册(exception来自HRESULT:0x80040154(REGDB_E_CLASSNOTREG ))。 尝试创buildMicrosoft.Office.Interop.Excel.Application对象时发生失败,如下所示: var app = new Application(); 我的项目有一个参考Microsoft.Office.Interop.Excel.dll (版本14.0.0.0,运行版本v2.0.50727),它位于: C:\ Program Files \ Microsoft Visual Studio 10.0 \ Office \ PIA \ Office14 \ Microsoft.Office.Interop.Excel.dll Visual Studio工具 我试图运行与引用的DLL上的默认设置的应用程序: 复制本地=假 embedded互操作types=真 特定版本=真 我也尝试在引用的dll上使用以下设置运行应用程序: 复制本地=真 embeddedInterop Types = False 特定版本=真 但在使用Office 2010的计算机上,这两种尝试都没有奏效。 其他说明:Office 2010的机器是64位W / Windows 7.我的开发机器是Windows XP的X86。 题 […]

Excel到SQL,C#库

我有一个客户端给我的excel电子表格,它被分解成多个工作表。 我需要逐行提取每个工作表中的某些列,并遍历每个工作表(所有相同的模板)以将数据转储到数据库表中。 还需要清除出现的任何重复项。 我希望build立一个简单的asp.net前端,使用C#语言。 你会推荐什么样的图书馆? 我还没有find任何有用的东西。 任何帮助将被极大的赞赏! 🙂 PS到目前为止我发现的最好的是OpenXML(Microsoft库)

如何在Excel中使用epplus将十进制数字格式化为百分比?

我使用下面的代码来格式化十进制数字在Excel中使用Epplus的百分比。 我用过这个例子 。 sheet.Cells["B:B"].Style.Numberformat.Format = "#0\\.00%"; 这个数字在床单中看起来很正常,但是在编辑栏中看起来不一样。 编辑栏中显示的数字是947,数字是9.47%。 检查图像的问题样本。 如何解决这个问题?

将excel数据粘贴到空白DataGridView – 索引超出范围的exception

我有一个Excel表格,内容如下: 所以,我想要实现的是从Excel复制并粘贴到一个空白的DataGridView视图。 这是迄今为止的代码: private void PasteClipboard(DataGridView myDataGridView) { DataObject o = (DataObject)Clipboard.GetDataObject(); if (o.GetDataPresent(DataFormats.Text)) { string[] pastedRows = Regex.Split(o.GetData(DataFormats.Text).ToString().TrimEnd("\r\n".ToCharArray()), "\r\n"); foreach (string pastedRow in pastedRows) { string[] pastedRowCells = pastedRow.Split(new char[] { '\t' }); using (DataGridViewRow myDataGridViewRow = new DataGridViewRow()) { for (int i = 0; i < pastedRowCells.Length; i++) myDataGridViewRow.Cells[i].Value = pastedRowCells[i]; myDataGridView.Rows.Add(myDataGridViewRow); } […]

在EPPlus C#中展开一个表格

有什么方法可以在C#中扩展EPPlus中的现有表。 我的程序工作的方式是创build只有2行的表,并不断添加更多。 我似乎无法在ExcelTablefind任何resize的方法。 有没有一个专门的方法,或者我需要使用某种替代? 编辑:好吧,我只是要澄清这一点。 我已经有EPPLus的工作,并build立一个ExcelTable。 我的问题是:如何使现有的ExcelTable更大(添加更多的行)?