I have a homework assignment where I require students to create a set of pivot charts in Microsoft Excel. I know that I can reduce cheating by changing datasets or chart specifications around, but because of the complexity of the assignments and my practical constraints in not being able to mark more than five or so different versions, this does not prevent students from finding those who have the same specifications as themselves and copying among themselves. (I am coordinating a course with over 700 students, so I can only do so much as far as alternate versions go. The students are well connected to each other by Facebook, so communicating among each is quite feasible for those who want to cheat.)

On one hand, in my situation, creating alternate versions is difficult because of the complexity of the assignment, and its effectiveness is limited because hard-working cheaters can cheat anyways. On the other hand, I believe that if I can effectively detect cheating after the fact, then giving a strong warning to students about this could serve as an effective deterrent that should greatly reduce the incidence of cheating.

Are there features in Microsoft Excel that make it easy to detect cheating by copying between students? I don't expect to easily detect if a student copies elements like pivot tables from one file to another, but perhaps at least I might be able to detect if a student copied someone else's file altogether. I'm not necessarily looking for anything foolproof--I expect that the cheaters in this assignment would be those who don't even know basic things like how to manually change author information in an Excel file.

Speaking of which, unfortunately, as far as I can tell, Excel overwrites author information with the last person to save the file, so I couldn't even use that to tell if someone has copied a file created by someone else.

I would appreciate any suggestions.


Some answers have suggested asking students to submit a written explanation of their reasoning. Although I mentioned that there are over 700 students, let me be more explicit: I do not consider solutions that require reading and marking additional textual submissions to be feasible for my context. On one hand, there are multiple instructors, so any instructor would only have to mark a few dozen assignments. On the other hand, if there is cheating across sections, then reading text submissions is not a feasible verification technique. Thus, I was looking for a solution that could easily indicate that a student's submission contained undeniable traces of some other student's work.

  • 4
    I used to open the files in something like programmers file editor and search for the string with name etc - amazing what is there... Found 1 student who had "created" the file under a different name 2 years prior... And that student was also one of my students...
    – Solar Mike
    Commented Dec 7, 2018 at 13:07
  • For what it's worth: the traditional way to make sure students understand what they did is to ask them to produce a report where they explain their work in their own words. Alternatively there can be a quick evaluation in lab where they would be asked a few questions to test their understanding.
    – Erwan
    Commented Dec 7, 2018 at 14:02
  • I seem to be assessing students for similar things in excel, charts etc frequency() etc and I use a quiz with 10 questions, each question having a category of 10 questions... So, questions ask things like ctrl+shift then enter is used for what type of function... Grades seem to be going as i would expect...
    – Solar Mike
    Commented Dec 7, 2018 at 14:58
  • @Erwan, please see my edit to understand why I don't consider this feasible in my situation.
    – Tripartio
    Commented Dec 7, 2018 at 16:10
  • 1
    Are you giving the students Excel files to work with, or handing them data sets and letting them build their own Excel files?
    – asgallant
    Commented Dec 7, 2018 at 17:22

7 Answers 7


Oh, hey, I've written scripts to deal with this problem, on a similar scale (about 800 students each semester). We create new "starting point" workbooks each semester.

The first step is to check the metadata. This can be automatically extracted by the command-line tool exiftool, the Python package openpyxl, or by just parsing the XML.

Then, if the creation date is older than your provided file, you know they downloaded a file from a previous semester. On the other hand, if the creation date is newer and the creator is the student rather than you, that means they created a new workbook from scratch and copied & pasted the contents in. There is little reason to do this unless they are trying to cover up cheating (but of course the student should get a chance to explain themselves).

Then there is the modified date—you can check that this is in a reasonable range (the days before the due date)—and lastModifiedBy. In our case, students turn in about a dozen workbooks over the semester, so it's worth it to keep track of their username and flag differences. If you're just getting one workbook, that might not make sense. I also check if the username seems to match the student's name; I have some automated checks which approve most of them, and prompt me for the remainder. If the name in the metadata is clearly a different person's name, we ask the student why that is.

Another thing which can be found is links. It's possible in Excel to refer to values in a different file, which creates a "link". When the workbook is uploaded without the corresponding linked file, the values can't be updated. Students often inadvertently create links when copying and pasting. The name of the file they copied from is stored in the workbook, which might be enough to make it clear it's from an illicit source. You can detect the presence of links by listing the files in the zip (every .xlsx file is really a zip file): if 'xl/externalLinks/externalLink1.xml' is present, then there are links.

I find the target of the link using openpyxl; in the workbook object, all links are in workbook._external_links. Given a link object link, the filename is in link.file_link.Target. If you want to do it on a lower level, the name of the linked file is in 'xl/externalLinks/_rels/externalLink1.xml.rels'.

I also compute a hash of each file in order to find exact duplicates (generally only students who re-upload the starting file).

A more time-consuming step is to extract all the cell contents (including formulas). A hash of those will find duplicates, but ignoring metadata, formatting and colors, any graphs, filters, and pivot tables; it only takes into account the actual cell contents. (So if the main thing your students are doing is creating a pivot table, this won't be helpful).

I also feed these cell contents to simhash to find "near-duplicates". I've used a command-line tool by Bart Massey as well as a Python package. Frankly, this doesn't seem very helpful most of the time. It has found suspicious similarities on several occasions, but it takes a lot of my time to check through the potential matches that come up.

I also find cell values that occur in a handful of workbooks (in, say, 2–12 of the 800 files.) The assumption is that cell values which occur in more files than that are "natural" for many students to include, and that a copying-cheating-ring would not be larger than that. I look at these and decide if they're suspicious or not (two students making a typo "Parrt 1" seems normal; a longer phrase with identical mispellings is not.)

It does take a couple hours of my time each time a batch of workbooks comes in, and it's far from foolproof, but it tends to turn up several clear cases of cheating each time.

  • Figure out a way to generate data sets and results programatically so you can uniquely verify each student's assignment separately. This would imply lots of effort initially but may payoff for later courses.

  • Use a single dataset and a single result set. Ask them for their reasoning behind for achieving the most complex tasks of the assignment. Use this to check for cheating. No one person thinks exactly the same or describes something complex in the same manner.

My recommendation is for the latter. Most jobs that can be done with tools like Excel will be automated in the near future. The best that your students can learn is to reason (and articulate this effectively) and choose the appropriate tool/technique for the job.

  • 1
    Your first suggestion is a lot of work, but might fit my situation better. I've edited my question to clarify why the latter recommended solution is not feasible in my situation.
    – Tripartio
    Commented Dec 7, 2018 at 16:13
  • @Tripartio if you choose the automation path, start building your prototype and post more detailed questions in stackoverflow. On a side note for inspiration you may want to read this paper link.springer.com/chapter/10.1007%2F978-3-030-00761-4_12 of a solution done to automate assessment of software engineering assignments. Commented Dec 9, 2018 at 12:06
  • I like your second recommendation. OP says it doesn't fit OP's profile, but the instructors can grade the explanations from their group for value, while an automated script can sieve out the textual similarities in the explanantion over the whole class.
    – bukwyrm
    Commented Dec 12, 2018 at 7:11
  • 1
    @KoenigLear Re your suggest to generate Excel files in a programatic way reminds me to access and modify their content with Python's openpyxl module (openpyxl.readthedocs.io/en/stable, a maybe more gentle introduction -- now (March 2020) maybe just a little bit behind the project -- by Al Sweigart automatetheboringstuff.com/chapter12.
    – Buttonwood
    Commented Mar 25, 2020 at 23:10

I assume you need clues which can be obtained automatically.

It might be an idea to check all the positions and sizes of graphs / diagrams / drawings etc. Those are usually placed by mouse movement and so the positions should differ.

If you are very subtile, you might want to give them individual sheets to start from (maybe containing the initital data set). Those files can be secretly marked in the underlying xml files, e.g. by adding an extra tag per student (I did not test this, but I'm sure no one will detect it) or by adding a personalized "document creator" (but this is visible to the students). You just have zu unzip the .xlsx-file and modify docPros\core.xml

A pure file copy can easily be detected by e.g. calculating a PGP checksum for the files. If two checksums are the same, they are exact copies.

  • 1
    I like the idea of programmatically verifying positions and sizes of graphs in Excel. Could you point me towards any sources that might suggest how to do that?
    – Tripartio
    Commented Dec 7, 2018 at 16:12
  • @Tripartio are you capable of using e.g. python for scripting? Then I could try to build a minimal example code which could be adapted for your needs.
    – OBu
    Commented Dec 7, 2018 at 16:23
  • I normally use R, but I can read Python and could probably translate it. Example code would be fantastic.
    – Tripartio
    Commented Dec 7, 2018 at 16:53
  • I think you should expand a bit on the OpenXML format. At least point out it's a zip file. There's an OpenXML SDK that helps generate code and such. Something more obscure might be to set a custom r:id for the worksheet. A quick test shows you only need to update the reference in \_rels\.rels and \xl\workbook.xml and \xl\_rels\workbook.xml.rels
    – BurnsBA
    Commented Dec 7, 2018 at 17:08

If the revision history is not enabled, you will not be able to glean any information pertaining to the history of the document - maybe make enabling it a rule?

Other recommendations:

  • If the project is based on data, programatically produce or alter the data that each student is given (they download it from some server)
  • Rule that if any two students are found to have identical solutions, both will fail the course. The students giving their solution away usually are aware that the ones they are giving it to are inept, so they will be extremely wary.
  • Have the students install a tracker (something like this: https://www.exceltrainingvideos.com/track-changes-automatically-in-worksheet-with-vba/) - The end result may be similar, but the way to the result will vary between persons. A lot.
  • 2
    Your second bullet point should not be used. Students who are not cheating will produce identical solutions, given a large enough class size. The 700 students in this class are more than sufficient to produce identical results without cheating.
    – asgallant
    Commented Dec 11, 2018 at 16:18
  • That entirely depends on the complexity of the task. You are correct that this might lead to false positives in smaller assignments, but the possibilities grow mighty fast (especially with identifiers that have a lot of wiggle, like positioning of graphs, etc.) which makes the probability of false positives miniscule.
    – bukwyrm
    Commented Dec 12, 2018 at 7:07

I teach excel and have had several students "cheat" by copying from other students. I have always caught them by right clicking the file they turn in and selecting "Properties". Under "Security", it gives the date and author ID of the student that created the file. If it's 2 different names, or a name that's completely different, that's a great clue. Hope this helps.

  • 1
    Unfortunately, in my case, I am the one who created the template file, so my own name is always the original creator. So this does not help in my situation.
    – Tripartio
    Commented Mar 25, 2020 at 9:56
  • 3
    How do you know you always caught them? Most cheaters are probably smarter than just copying the file.
    – user111388
    Commented May 7, 2020 at 17:08

I am also a teacher and I have the same problem with plagiarism.

I use these methods - I can detect:

  • Pure copying and renaming files between students - I am using a special encrypted string placed into meta of each student's file. So when student is copying classmate's file, he is also copying this special string and I am able to detect from what file it was copied.
  • Copying specific range of cells - I can put into specific cells some hidden link which contains a special encrypted string. If I put this link into cell into some data table (but to cell what student doesn't need to work with), there is some chance to catch him while copying, because he will copy some range of cells WITH THIS LINK.
  • Also I am looking for author name and last edited author name.

You can use these advices for making your own script. Or just try online tool https://www.sheetexpert.com/ - I developed it for saving my and my colleagues' time.

  • 3
    This has attracted a few "spam" flags. This seems to be a free tool developed by the post author, so I'm not sure it's technically spam. Still: Vaclav, it would be good if you can expand your answer to explain what your tool does and how it addresses OP's specific question; we don't really allow "link-only answers."
    – cag51
    Commented Nov 25, 2020 at 1:00
  • 2
    Hi @cag51, thank you and sorry. I updated my post, I hope it's better now. Commented Nov 26, 2020 at 6:47

have you tried downloading all of the files into one folder and then sorting based on CRC number? I run a stats class with excel submissions and have caught a lot of students this way because crc will be identifical in most cases if the file is exact copy

  • 1
    Could you perhaps link some reference on how to do this?
    – GoodDeeds
    Commented Sep 21, 2020 at 21:45
  • 1
    Welcome to Academia SE. Could you please explain your answer better? In addition to explaining (or linking) to how to create CRC numbers on Excel files, please clarify if CRC numbers are similar only with exact matches (which is not so useful, since cheating is usually not a 100% match), or if closer numbers indicate closer similarity (which would be more useful).
    – Tripartio
    Commented Sep 22, 2020 at 8:35

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .